People in the online space have been saying this since the 90s, and today, the same is still true - you absolutely MUST do content marketing!
... because Content is KING!
It's all valuable content that can attract, engage and convert your ideal customers.
For you as a clinic owner, you simply can't ignore the fact that you need to create content.
There are 3 types of traffic and you need to create content suited to them all. So let's go over these now with a few ideas on what to create.
At the top of the content funnel we have TOFU (Top Of Funnel Vistors).
At the top of the funnel you need content that generates leads. These are the types of people that aren't ready to buy yet but they know they have a problem and they are doing early research about the symptoms and possible treatments for a condition.
These are people who search "What if your lower back hurts?"
Basically, TOFU provides the background for what you do and answers the 'what if' this happened to me. Or answers the prospects question: do I have this condition?
Think about all the patients you already have and the conditions you deal with on an everyday basis. Then answer the most common questions around those conditions. These are the answers potential patients will be looking for.
These are the types of patients that already have a problem and they are shopping around for a potential solution to that problem.
They are evaluating the information and trying to work out who will be the best option to solve their problem. And that's where content comes into play.
These are people who search "Sciatic Treatment" when their lower back hurts.
Why do you get lower back pain?
How do I effectively treat lower back pain?
What type of results and outcome will I expect?
Here you want to educate the potential patient about what works and what doesn't, convincing them that your service can provide the right solution.
BOFU (Bottom Of Funnel Vistors) are ready to buy and they are comparing businesses to pick the best fit.
These are the types of patients that know what they want and they are now just evaluating the best clinic to treat their problem.
These are people who search "Best Physiotherapist Victoria" when their lower back hurts and they want a physiotherapist.
Having alot of google or facebook reviews, patient testmonials, and team profiles really help convert BOFU.
Most clinic owners I know already market to BOFU and this is a highly competitive. Especially if you are trying to rank in Google.
The biggest opportunity for clinic owners is marketing to TOFU and MOFU. When most websites only convert at 3%, this means 97% of your website traffic leave your site.
And most of them are TOFU and BOFU.
What are you doing now to capture website vistors who are NOT READY to book an appointment now at your clinic? How can you capture their emails to nuture them and hopefully convert them in days or weeks or months?
RICK'S MARKETING TIP: You need to capture people's email addresses so you can NURTURE THEM in your marketing funnel.
Your TOFU and MOFU content is a primary key in convincing them when they are at BOFU because it provides education and detail to show you know what you're doing.
Your content alone provides value! If you don't believe me, look at what Gary Vaynerchuk is doing and he is killing it!
A marketing funnel is a multi step marketing campaign that leads a prospect toward a desired action.
A lead magnet is something your potential patients will find valuable.
You've seen these types of 'lead magnets' everywhere right?
Once you have people in your funnel, you can create a series of emails to tell a story and provide more education that leads the patient through your funnel (from tofu to bofu), then eventually the patient calls and books an appointment.
Send them emails (personalized & relevant) and nurture them until they become a patient. Think about the conversations you have to educate patients about pain and problems. Simply turn those conversations into emails so you're providing the same value, you're just doing it via email instead of face-to-face.
And 3 things you can measure in your funnel is your conversion rates of your lead magnets, answer rate over the phones and booking rates over the phone (aka call tracking metrics). Remember, you can manage what you measure.
Do you have call tracking metrics at your clinic?


text:
Kemmler steht für:
 Kemmler, Berg im Vogtland
 Kemmler Baustoffe, deutsches Baustoffhandelsunternehmen

Kemmler ist der Familienname folgender Personen:
 Gerhard Kemmler (* 1948), deutscher Brigadegeneral
 Hubert Kemmler (* 1961), als Hubert Kah bekannter deutscher Musiker
 Jonas Kemmler (* 1996), deutscher Schauspieler
 Lilly Kemmler (1924–2011), deutsche Psychologin und Hochschullehrerin
 Melanie Kemmler (* 1972), deutsche Illustratorin
 Nico Kemmler (* 1978), deutscher Fußballspieler und -trainer
 Olaf Kemmler (* 1966), deutscher Science-Fiction-Autor und -Herausgeber
 Paul Kemmler (1865–1929), deutscher Psychiater und Mediziner
 Rolf Kemmler (* 1967), deutscher Romanist
 Rudy Kemmler (1860–1909), US-amerikanischer Baseballspieler
 Sibylle Kemmler-Sack (1934–1999), deutsche Chemikerin
 Sven Kemmler (* 1968), deutscher Autor und Kabarettist
 William Kemmler (1860–1890), US-amerikanischer Mörder und erste Person, die mit dem elektrischen Stuhl hingerichtet wurde
 Wilhelm Kemmler (1864–1916), deutscher Architekt und Königlich Bayerischer Baurat
 Willi Kemmler (* 1941), deutscher Unternehmer und Politiker der SPD

redpajama_set_name: RedPajamaWikipedia


Mugwort: The Herb that Fights Joint Pain, Depression & Cancer?
What exactly is mugwort? Well, outside of sounding like it should be in the pages of the "Harry Potter" series, it's a root-based perennial plant that goes by many different names. Most importantly, it's been shown to help fight serious diseases and maladies, from cancer to joint pain.
You may often hear mugwort referred to by other names, such as felonherb, green ginger or common (wild) wormwood. (1) It is sometimes confused for St. John's wort (because of the name) or chrysanthemum weed (because of its appearance). You can find varieties of mugwort growing natively in Asia, Northern Europe and parts of North America — it's so common that it may even be growing on the outskirts of your yard right now, and you didn't even know it!
The plant's technical title, Artemisia vulgaris, comes from "Artemis," the name of a Greek moon goddess and considered to be a patron of women. Meanwhile, "vulgaris" ties back to the first of many of mugwort's uses that we'll be talking about: Historically, it was used as a herbal inhibitor for women's menstrual cycles and helped provide menopause relief.
The plant contains high levels of antioxidants, which help to alleviate digestive and intestinal issues like ulcers, vomiting, nausea and constipation. It's even been known to elicit intense and vivid dreams. (5) Components of mugwort are also being tested and studied as a possible alternative treatment for some cancers. Let's dive into more details and history behind all of the benefits of mugwort.
Ancient Chinese medicine starting using a method called moxibustion as a natural solution to this dangerous situation. So what is moxibustion? The leaves of the mugwort plant are formed into a short stick or cone and burned over the points of acupuncture, which inhibits the release of energy and circulates blood by creating a warming effect on the acupuncture site.
Mugwort in conjunction with the moxibustion technique not only succeeds with stimulating fetal movement inside the womb — it's also a successful therapy for certain forms of arthritis.
In one study, the same ancient Chinese technique was blind-tested on participants with osteoarthritis. Out of 110 patients, half were given the real-deal moxibustion treatment, and the other half were given the placebo version three times a week for six weeks. Neither the patients, not the practitioners knew which patient was receiving which treatment.
Completed and current ongoing studies on the possible uses of mugwort indicate that links to the fundamental component of the plant, artemisinins, as being toxic to certain cancer cells. Relatedly, mugwort is a naturally occurring anti-malarial.
As scientists have continued to study the components that effect malaria, they've found links to artemisinins targeting mitochondria, endoplasmic reticulum and the lysosome. Cancer cells contain a higher level of iron then healthy cells do, which in turn, makes them more susceptible to the toxicity in artemisinin.
The plant itself can reach up to six feet at its highest and has often been confused with a hemlock, but you can tell the difference by a few simple factors: the height, stem color and its flowers. For example, hemlocks grow up to 12 feet, which is unheard of for a mugwort plant. The stem of a hemlock is known to be green with purple splotches, but mugwort stems are purely purple. Hemlock's flowers are white with 5 petals in an upside down umbrella shape, while mugwort flowers are a pale yellow or red, wrapping around the stalk in an alternating pattern around it.
Before we come close to wrapping up, I want to make sure that you are aware of possible allergies and side effects of the mugwort plant. There are many common allergies to this specific family of plants, and not all of them are mentioned here. Be sure to consult your doctor before use.
These are not the only common allergies tied to mugwort. There are many other closely related allergens. Do not consume or topically use mugwort if you are pregnant, breastfeeding or planning to be pregnant without consulting your doctor.
Now that you know how to spot mugwort, and you've heard all about its history, you're fully equipped to put some of this historically rich plant's natural remedies to good use. Since the days of the Bible, this is one herb that's uses go a very long way.
We have discussed many simple ways that this one plant can aid in relieving your pain, help you avoid invasive surgeries, soothe your aching joints, settle your stomach, balance your mood and potentially be a new way to fight cancer — and there's a possibility it could even be growing in your yard!


Monster Yamaha Tech 3's Bradley Smith has given an in-depth analysis of his season so far, as he prepares for his home race this Sunday at the Hertz British Grand Prix.
In his second season in MotoGP™ Smith has recently seen his Tech 3 contract extended for 2015 and is looking to move up the overall standings from tenth, in the remaining seven rounds.
With the arrival of Pol Espargaro in the Tech 3 team this year, Smith has thus far been outperformed by the Spanish rookie – who sits 13 points above him in the World Championship classification.
On his strong relationship with his team boss Herve Poncharal and those around him in the Monster Yamaha Tech 3 garage Smith states that their support has been a big help.
"Fortunately for me Herve and Yamaha believed in what I was capable of doing, they had all of the data and they created some number charts, then they found that there was no rider available that was better for the job than me, which obviously is quite an honor for me because it means that my real potential is high and they believe in that," Smith explained.


text:
Q: Can't set Facebook test user work position Like the title says, I'm having problems with the "Position" field for test users. I've been able to create a work history by creating a organization page, but no matter what i set as "Position" it gets blanked out when I hit save. The problem is, this is the only field we use in our app, and since we haven't been able to add this for a test user, Facebook refuses to approve our app.
To be more specific, this is what the browser sends when I add a position from a test account (snatched from chrome dev tools):
position_id:0
position_text:[Whatever text i set as position]

I've seen that for my real account, the position_id is set to a number when I choose one of the pre-existing options, but for test users none of these are available. Is it not possible to do this for test users at all?

A: Got a response from a Facebook developer group.
"App Test Users can only interact with objects they created and since they cannot create workplaces you cannot test this with App Test Users."
This is partially correct, you can create an organization page as a test user and set that as your workplace. However you can not fill anything in the "Position" (Job title) field. We managed to get around this by setting the field in our own database manually for test users and check that it works for real users.

redpajama_set_name: RedPajamaStackExchange


text:
Q: Kendo Mobile Listview Template get mobile switch position onChange event I'm developing a solution using kendo UI mobile there I have custom template like this

Here it loads a List view from data source with a mobile switch button on the right. (Each list item with a mobilw switch) Problem is I need to get the position of mobile switch button through on change() (ex: 0,1,2 ). How do I do that? Can some one help me :-)
Thanks
Chinthaka


text:
/*-------------------------------------------------------------------------------
 This file is part of Ranger.

 Ranger is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.

 Ranger is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with Ranger. If not, see <http://www.gnu.org/licenses/>.

 Written by:

 Marvin N. Wright
 Institut für Medizinische Biometrie und Statistik
 Universität zu Lübeck
 Ratzeburger Allee 160
 23562 Lübeck
 Germany

 http://www.imbs-luebeck.de
 #-------------------------------------------------------------------------------*/

#include <algorithm>
#include <cmath>
#include <iostream>
#include <iterator>
#include <numeric>
#include <vector>

#include "RangerLib/utility/utility.h"
#include "RangerLib/Tree/TreeSurvival.h"
#include "RangerLib/utility/Data.h"

TreeSurvival::TreeSurvival(std::vector<double>* unique_timepoints, size_t status_varID,
    std::vector<size_t>* response_timepointIDs) :
    status_varID(status_varID), unique_timepoints(unique_timepoints), response_timepointIDs(response_timepointIDs), num_deaths(
        0), num_samples_at_risk(0) {
  this->num_timepoints = unique_timepoints->size();
}

TreeSurvival::TreeSurvival(std::vector<std::vector<size_t>>& child_nodeIDs, std::vector<size_t>& split_varIDs,
    std::vector<double>& split_values, std::vector<std::vector<double>> chf, std::vector<double>* unique_timepoints,
    std::vector<size_t>* response_timepointIDs) :
    Tree(child_nodeIDs, split_varIDs, split_values), status_varID(0), unique_timepoints(unique_timepoints), response_timepointIDs(
        response_timepointIDs), chf(chf), num_deaths(0), num_samples_at_risk(0) {
  this->num_timepoints = unique_timepoints->size();
}

TreeSurvival::~TreeSurvival() {
}

void TreeSurvival::initInternal() {
  // Number of deaths and samples at risk for each timepoint
  num_deaths = new size_t[num_timepoints];
  num_samples_at_risk = new size_t[num_timepoints];
}

void TreeSurvival::appendToFileInternal(std::ofstream& file) {  // #nocov start

  // Convert to vector without empty elements and save
  std::vector<size_t> terminal_nodes;
  std::vector<std::vector<double>> chf_vector;
  for (size_t i = 0; i < chf.size(); ++i) {
    if (!chf[i].empty()) {
      terminal_nodes.push_back(i);
      chf_vector.push_back(chf[i]);
    }
  }
  saveVector1D(terminal_nodes, file);
  saveVector2D(chf_vector, file);
} // #nocov end

void TreeSurvival::createEmptyNodeInternal() {
  chf.push_back(std::vector<double>());
}

void TreeSurvival::computeSurvival(size_t nodeID) {
  std::vector<double> chf_temp;
  chf_temp.reserve(num_timepoints);
  double chf_value = 0;
  for (size_t i = 0; i < num_timepoints; ++i) {
    if (num_samples_at_risk[i] != 0) {
      chf_value += (double) num_deaths[i] / (double) num_samples_at_risk[i];
    }
    chf_temp.push_back(chf_value);
  }
  chf[nodeID] = chf_temp;
}

double TreeSurvival::computePredictionAccuracyInternal() {

  // Compute summed chf for samples
  std::vector<double> sum_chf;
  for (size_t i = 0; i < prediction_terminal_nodeIDs.size(); ++i) {
    size_t terminal_nodeID = prediction_terminal_nodeIDs[i];
    sum_chf.push_back(std::accumulate(chf[terminal_nodeID].begin(), chf[terminal_nodeID].end(), 0.0));
  }

  // Return concordance index
  return computeConcordanceIndex(data, sum_chf, dependent_varID, status_varID, oob_sampleIDs);
}

bool TreeSurvival::splitNodeInternal(size_t nodeID, std::vector<size_t>& possible_split_varIDs) {

  if (splitrule == MAXSTAT) {
    return findBestSplitMaxstat(nodeID, possible_split_varIDs);
  } else if (splitrule == EXTRATREES) {
    return findBestSplitExtraTrees(nodeID, possible_split_varIDs);
  } else {
    return findBestSplit(nodeID, possible_split_varIDs);
  }
}

bool TreeSurvival::findBestSplit(size_t nodeID, std::vector<size_t>& possible_split_varIDs) {

  double best_decrease = -1;
  size_t num_samples_node = sampleIDs[nodeID].size();
  size_t best_varID = 0;
  double best_value = 0;

  computeDeathCounts(nodeID);

  // Stop early if no split posssible
  if (num_samples_node >= 2 * min_node_size) {

    // For all possible split variables
    for (auto& varID : possible_split_varIDs) {

      // Find best split value, if ordered consider all values as split values, else all 2-partitions
      if (data->isOrderedVariable(varID)) {
        if (splitrule == LOGRANK) {
          findBestSplitValueLogRank(nodeID, varID, best_value, best_varID, best_decrease);
        } else if (splitrule == AUC || splitrule == AUC_IGNORE_TIES) {
          findBestSplitValueAUC(nodeID, varID, best_value, best_varID, best_decrease);
        }
      } else {
        findBestSplitValueLogRankUnordered(nodeID, varID, best_value, best_varID, best_decrease);
      }

    }
  }

  // Stop and save CHF if no good split found (this is terminal node).
  if (best_decrease < 0) {
    computeSurvival(nodeID);
    return true;
  } else {
    // If not terminal node save best values
    split_varIDs[nodeID] = best_varID;
    split_values[nodeID] = best_value;

    // Compute decrease of impurity for this node and add to variable importance if needed
    if (importance_mode == IMP_GINI || importance_mode == IMP_GINI_CORRECTED) {
      addImpurityImportance(nodeID, best_varID, best_decrease);
    }

    return false;
  }
}

bool TreeSurvival::findBestSplitMaxstat(size_t nodeID, std::vector<size_t>& possible_split_varIDs) {

  size_t num_samples_node = sampleIDs[nodeID].size();

  // Check node size, stop if maximum reached
  if (num_samples_node <= min_node_size) {
    computeDeathCounts(nodeID);
    computeSurvival(nodeID);
    return true;
  }

  // Compute scores
  std::vector<double> time;
  time.reserve(num_samples_node);
  std::vector<double> status;
  status.reserve(num_samples_node);
  for (auto& sampleID : sampleIDs[nodeID]) {
    time.push_back(data->get(sampleID, dependent_varID));
    status.push_back(data->get(sampleID, status_varID));
  }
  std::vector<double> scores = logrankScores(time, status);
  //std::vector<double> scores = logrankScoresData(data, dependent_varID, status_varID, sampleIDs[nodeID]);

  // Save split stats
  std::vector<double> pvalues;
  pvalues.reserve(possible_split_varIDs.size());
  std::vector<double> values;
  values.reserve(possible_split_varIDs.size());
  std::vector<double> candidate_varIDs;
  candidate_varIDs.reserve(possible_split_varIDs.size());

  // Compute p-values
  for (auto& varID : possible_split_varIDs) {

    // Get all observations
    std::vector<double> x;
    x.reserve(num_samples_node);
    for (auto& sampleID : sampleIDs[nodeID]) {
      x.push_back(data->get(sampleID, varID));
    }

    // Order by x
    std::vector<size_t> indices = order(x, false);
    //std::vector<size_t> indices = orderInData(data, sampleIDs[nodeID], varID, false);

    // Compute maximally selected rank statistics
    double best_maxstat;
    double best_split_value;
    maxstat(scores, x, indices, best_maxstat, best_split_value, minprop, 1 - minprop);
    //maxstatInData(scores, data, sampleIDs[nodeID], varID, indices, best_maxstat, best_split_value, minprop, 1 - minprop);

    if (best_maxstat > -1) {
      // Compute number of samples left of cutpoints
      std::vector<size_t> num_samples_left = numSamplesLeftOfCutpoint(x, indices);
      //std::vector<size_t> num_samples_left = numSamplesLeftOfCutpointInData(data, sampleIDs[nodeID], varID, indices);

      // Remove largest cutpoint (all observations left)
      num_samples_left.pop_back();

      // Use unadjusted p-value if only 1 split point
      double pvalue;
      if (num_samples_left.size() == 1) {
        pvalue = maxstatPValueUnadjusted(best_maxstat);
      } else {
        // Compute p-values
        double pvalue_lau92 = maxstatPValueLau92(best_maxstat, minprop, 1 - minprop);
        double pvalue_lau94 = maxstatPValueLau94(best_maxstat, minprop, 1 - minprop, num_samples_node,
            num_samples_left);

        // Use minimum of Lau92 and Lau94
        pvalue = std::min(pvalue_lau92, pvalue_lau94);
      }

      // Save split stats
      pvalues.push_back(pvalue);
      values.push_back(best_split_value);
      candidate_varIDs.push_back((double)varID);
    }
  }

  double adjusted_best_pvalue = std::numeric_limits<double>::max();
  size_t best_varID = 0;
  double best_value = 0;

  if (pvalues.size() > 0) {
    // Adjust p-values with Benjamini/Hochberg
    std::vector<double> adjusted_pvalues = adjustPvalues(pvalues);

    double min_pvalue = std::numeric_limits<double>::max();
    for (size_t i = 0; i < pvalues.size(); ++i) {
      if (pvalues[i] < min_pvalue) {
        min_pvalue = pvalues[i];
        best_varID = (size_t)candidate_varIDs[i];
        best_value = values[i];
        adjusted_best_pvalue = adjusted_pvalues[i];
      }
    }
  }

  // Stop and save CHF if no good split found (this is terminal node).
  if (adjusted_best_pvalue > alpha) {
    computeDeathCounts(nodeID);
    computeSurvival(nodeID);
    return true;
  } else {
    // If not terminal node save best values
    split_varIDs[nodeID] = best_varID;
    split_values[nodeID] = best_value;
    return false;
  }
}

void TreeSurvival::computeDeathCounts(size_t nodeID) {

  // Initialize
  for (size_t i = 0; i < num_timepoints; ++i) {
    num_deaths[i] = 0;
    num_samples_at_risk[i] = 0;
  }

  for (auto& sampleID : sampleIDs[nodeID]) {
    double survival_time = data->get(sampleID, dependent_varID);

    size_t t = 0;
    while (t < num_timepoints && (*unique_timepoints)[t] < survival_time) {
      ++num_samples_at_risk[t];
      ++t;
    }

    // Now t is the survival time, add to at risk and to death if death
    if (t < num_timepoints) {
      ++num_samples_at_risk[t];
      if (data->get(sampleID, status_varID) == 1) {
        ++num_deaths[t];
      }
    }
  }
}

void TreeSurvival::computeChildDeathCounts(size_t nodeID, size_t varID, std::vector<double>& possible_split_values,
    size_t* num_samples_right_child, size_t* delta_samples_at_risk_right_child, size_t* num_deaths_right_child,
    size_t num_splits) {

  // Count deaths in right child per timepoint and possbile split
  for (auto& sampleID : sampleIDs[nodeID]) {
    double value = data->get(sampleID, varID);
    size_t survival_timeID = (*response_timepointIDs)[sampleID];

    // Count deaths until split_value reached
    for (size_t i = 0; i < num_splits; ++i) {

      if (value > possible_split_values[i]) {
        ++num_samples_right_child[i];
        ++delta_samples_at_risk_right_child[i * num_timepoints + survival_timeID];
        if (data->get(sampleID, status_varID) == 1) {
          ++num_deaths_right_child[i * num_timepoints + survival_timeID];
        }
      } else {
        break;
      }
    }
  }
}

void TreeSurvival::findBestSplitValueLogRank(size_t nodeID, size_t varID, double& best_value, size_t& best_varID,
    double& best_logrank) {

  // Create possible split values
  std::vector<double> possible_split_values;
  data->getAllValues(possible_split_values, sampleIDs[nodeID], varID);

  // Try next variable if all equal for this
  if (possible_split_values.size() < 2) {
    return;
  }

  // -1 because no split possible at largest value
  size_t num_splits = possible_split_values.size() - 1;

  // Initialize
  size_t* num_deaths_right_child = new size_t[num_splits * num_timepoints]();
  size_t* delta_samples_at_risk_right_child = new size_t[num_splits * num_timepoints]();
  size_t* num_samples_right_child = new size_t[num_splits]();

  computeChildDeathCounts(nodeID, varID, possible_split_values, num_samples_right_child,
      delta_samples_at_risk_right_child, num_deaths_right_child, num_splits);

  // Compute logrank test for all splits and use best
  for (size_t i = 0; i < num_splits; ++i) {
    double numerator = 0;
    double denominator_squared = 0;

    // Stop if minimal node size reached
    size_t num_samples_left_child = sampleIDs[nodeID].size() - num_samples_right_child[i];
    if (num_samples_right_child[i] < min_node_size || num_samples_left_child < min_node_size) {
      continue;
    }

    // Compute logrank test statistic for this split
    size_t num_samples_at_risk_right_child = num_samples_right_child[i];
    for (size_t t = 0; t < num_timepoints; ++t) {
      if (num_samples_at_risk[t] < 2 || num_samples_at_risk_right_child < 1) {
        break;
      }

      if (num_deaths[t] > 0) {
        // Numerator and demoninator for log-rank test, notation from Ishwaran et al.
        double di = (double) num_deaths[t];
        double di1 = (double) num_deaths_right_child[i * num_timepoints + t];
        double Yi = (double) num_samples_at_risk[t];
        double Yi1 = (double) num_samples_at_risk_right_child;
        numerator += di1 - Yi1 * (di / Yi);
        denominator_squared += (Yi1 / Yi) * (1.0 - Yi1 / Yi) * ((Yi - di) / (Yi - 1)) * di;
      }

      // Reduce number of samples at risk for next timepoint
      num_samples_at_risk_right_child -= delta_samples_at_risk_right_child[i * num_timepoints + t];

    }
    double logrank = -1;
    if (denominator_squared != 0) {
      logrank = fabs(numerator / sqrt(denominator_squared));
    }

    if (logrank > best_logrank) {
      best_value = (possible_split_values[i] + possible_split_values[i + 1]) / 2;
      best_varID = varID;
      best_logrank = logrank;

      // Use smaller value if average is numerically the same as the larger value
      if (best_value == possible_split_values[i + 1]) {
        best_value = possible_split_values[i];
      }
    }
  }

  delete[] num_deaths_right_child;
  delete[] delta_samples_at_risk_right_child;
  delete[] num_samples_right_child;
}

void TreeSurvival::findBestSplitValueLogRankUnordered(size_t nodeID, size_t varID, double& best_value,
    size_t& best_varID, double& best_logrank) {

  // Create possible split values
  std::vector<double> factor_levels;
  data->getAllValues(factor_levels, sampleIDs[nodeID], varID);

  // Try next variable if all equal for this
  if (factor_levels.size() < 2) {
    return;
  }

  // Number of possible splits is 2^num_levels
  size_t num_splits = ((size_t)1 << factor_levels.size());

  // Compute logrank test statistic for each possible split
  // Split where all left (0) or all right (1) are excluded
  // The second half of numbers is just left/right switched the first half -> Exclude second half
  for (size_t local_splitID = 1; local_splitID < num_splits / 2; ++local_splitID) {

    // Compute overall splitID by shifting local factorIDs to global positions
    size_t splitID = 0;
    for (size_t j = 0; j < factor_levels.size(); ++j) {
      if ((local_splitID & ((size_t)1 << j))) {
        double level = factor_levels[j];
		size_t factorID = (size_t)(floor(level) - 1);
		splitID = splitID | ((size_t)1 << factorID);
      }
    }

    // Initialize
    size_t* num_deaths_right_child = new size_t[num_timepoints]();
    size_t* delta_samples_at_risk_right_child = new size_t[num_timepoints]();
    size_t num_samples_right_child = 0;
    double numerator = 0;
    double denominator_squared = 0;

    // Count deaths in right child per timepoint
    for (auto& sampleID : sampleIDs[nodeID]) {
      size_t survival_timeID = (*response_timepointIDs)[sampleID];
      double value = data->get(sampleID, varID);
	  size_t factorID = (size_t)(floor(value) - 1);

      // If in right child, count
      // In right child, if bitwise splitID at position factorID is 1
	  if ((splitID & ((size_t)1 << factorID))) {
        ++num_samples_right_child;
        ++delta_samples_at_risk_right_child[survival_timeID];
        if (data->get(sampleID, status_varID) == 1) {
          ++num_deaths_right_child[survival_timeID];
        }
      }

    }

    // Stop if minimal node size reached
    size_t num_samples_left_child = sampleIDs[nodeID].size() - num_samples_right_child;
    if (num_samples_right_child < min_node_size || num_samples_left_child < min_node_size) {
      delete[] num_deaths_right_child;
      delete[] delta_samples_at_risk_right_child;
      continue;
    }

    // Compute logrank test statistic for this split
    size_t num_samples_at_risk_right_child = num_samples_right_child;
    for (size_t t = 0; t < num_timepoints; ++t) {
      if (num_samples_at_risk[t] < 2 || num_samples_at_risk_right_child < 1) {
        break;
      }

      if (num_deaths[t] > 0) {
        // Numerator and demoninator for log-rank test, notation from Ishwaran et al.
        double di = (double) num_deaths[t];
        double di1 = (double) num_deaths_right_child[t];
        double Yi = (double) num_samples_at_risk[t];
        double Yi1 = (double) num_samples_at_risk_right_child;
        numerator += di1 - Yi1 * (di / Yi);
        denominator_squared += (Yi1 / Yi) * (1.0 - Yi1 / Yi) * ((Yi - di) / (Yi - 1)) * di;
      }

      // Reduce number of samples at risk for next timepoint
      num_samples_at_risk_right_child -= delta_samples_at_risk_right_child[t];
    }
    double logrank = -1;
    if (denominator_squared != 0) {
      logrank = fabs(numerator / sqrt(denominator_squared));
    }

    if (logrank > best_logrank) {
      best_value = (double)splitID;
      best_varID = varID;
      best_logrank = logrank;
    }

    delete[] num_deaths_right_child;
    delete[] delta_samples_at_risk_right_child;
  }

}

void TreeSurvival::findBestSplitValueAUC(size_t nodeID, size_t varID, double& best_value, size_t& best_varID,
    double& best_auc) {

  // Create possible split values
  std::vector<double> possible_split_values;
  data->getAllValues(possible_split_values, sampleIDs[nodeID], varID);

  // Try next variable if all equal for this
  if (possible_split_values.size() < 2) {
    return;
  }

  size_t num_node_samples = sampleIDs[nodeID].size();
  size_t num_splits = possible_split_values.size() - 1;
  size_t num_possible_pairs = num_node_samples * (num_node_samples - 1) / 2;

  // Initialize
  double* num_count = new double[num_splits];
  double* num_total = new double[num_splits];
  size_t* num_samples_left_child = new size_t[num_splits];
  for (size_t i = 0; i < num_splits; ++i) {
    num_count[i] = (double)num_possible_pairs;
    num_total[i] = (double)num_possible_pairs;
    num_samples_left_child[i] = 0;
  }

  // For all pairs
  for (size_t k = 0; k < num_node_samples; ++k) {
    size_t sample_k = sampleIDs[nodeID][k];
    double time_k = data->get(sample_k, dependent_varID);
    double status_k = data->get(sample_k, status_varID);
    double value_k = data->get(sample_k, varID);

    // Count samples in left node
    for (size_t i = 0; i < num_splits; ++i) {
      double split_value = possible_split_values[i];
      if (value_k <= split_value) {
        ++num_samples_left_child[i];
      }
    }

    for (size_t l = k + 1; l < num_node_samples; ++l) {
      size_t sample_l = sampleIDs[nodeID][l];
      double time_l = data->get(sample_l, dependent_varID);
      double status_l = data->get(sample_l, status_varID);
      double value_l = data->get(sample_l, varID);

      // Compute split
      computeAucSplit(time_k, time_l, status_k, status_l, value_k, value_l, num_splits, possible_split_values,
          num_count, num_total);
    }
  }

  for (size_t i = 0; i < num_splits; ++i) {
    // Do not consider this split point if fewer than min_node_size samples in one node
    size_t num_samples_right_child = num_node_samples - num_samples_left_child[i];
    if (num_samples_left_child[i] < min_node_size || num_samples_right_child < min_node_size) {
      continue;
    } else {
      double auc = fabs((num_count[i] / 2) / num_total[i] - 0.5);
      if (auc > best_auc) {
        best_value = (possible_split_values[i] + possible_split_values[i + 1]) / 2;
        best_varID = varID;
        best_auc = auc;

        // Use smaller value if average is numerically the same as the larger value
        if (best_value == possible_split_values[i + 1]) {
          best_value = possible_split_values[i];
        }
      }
    }
  }

  // Clean up
  delete[] num_count;
  delete[] num_total;
  delete[] num_samples_left_child;
}

void TreeSurvival::computeAucSplit(double time_k, double time_l, double status_k, double status_l, double value_k,
    double value_l, size_t num_splits, std::vector<double>& possible_split_values, double* num_count,
    double* num_total) {

  bool ignore_pair = false;
  bool do_nothing = false;

  double value_smaller = 0;
  double value_larger = 0;
  double status_smaller = 0;

  if (time_k < time_l) {
    value_smaller = value_k;
    value_larger = value_l;
    status_smaller = status_k;
  } else if (time_l < time_k) {
    value_smaller = value_l;
    value_larger = value_k;
    status_smaller = status_l;
  } else {
    // Tie in survival time
    if (status_k == 0 || status_l == 0) {
      ignore_pair = true;
    } else {
      if (splitrule == AUC_IGNORE_TIES) {
        ignore_pair = true;
      } else {
        if (value_k == value_l) {
          // Tie in survival time and in covariate
          ignore_pair = true;
        } else {
          // Tie in survival time in covariate
          do_nothing = true;
        }
      }
    }
  }

  // Do not count if smaller time censored
  if (status_smaller == 0) {
    ignore_pair = true;
  }

  if (ignore_pair) {
    for (size_t i = 0; i < num_splits; ++i) {
      --num_count[i];
      --num_total[i];
    }
  } else if (do_nothing) {
    // Do nothing
  } else {
    for (size_t i = 0; i < num_splits; ++i) {
      double split_value = possible_split_values[i];

      if (value_smaller <= split_value && value_larger > split_value) {
        ++num_count[i];
      } else if (value_smaller > split_value && value_larger <= split_value) {
        --num_count[i];
      } else if (value_smaller <= split_value && value_larger <= split_value) {
        break;
      }
    }
  }

}

bool TreeSurvival::findBestSplitExtraTrees(size_t nodeID, std::vector<size_t>& possible_split_varIDs) {

  double best_decrease = -1;
  size_t num_samples_node = sampleIDs[nodeID].size();
  size_t best_varID = 0;
  double best_value = 0;

  computeDeathCounts(nodeID);

  // Stop early if no split posssible
  if (num_samples_node >= 2 * min_node_size) {

    // For all possible split variables
    for (auto& varID : possible_split_varIDs) {

      // Find best split value, if ordered consider all values as split values, else all 2-partitions
      if (data->isOrderedVariable(varID)) {
        findBestSplitValueExtraTrees(nodeID, varID, best_value, best_varID, best_decrease);
      } else {
        findBestSplitValueExtraTreesUnordered(nodeID, varID, best_value, best_varID, best_decrease);
      }

    }
  }

  // Stop and save CHF if no good split found (this is terminal node).
  if (best_decrease < 0) {
    computeSurvival(nodeID);
    return true;
  } else {
    // If not terminal node save best values
    split_varIDs[nodeID] = best_varID;
    split_values[nodeID] = best_value;

    // Compute decrease of impurity for this node and add to variable importance if needed
    if (importance_mode == IMP_GINI || importance_mode == IMP_GINI_CORRECTED) {
      addImpurityImportance(nodeID, best_varID, best_decrease);
    }

    return false;
  }
}

void TreeSurvival::findBestSplitValueExtraTrees(size_t nodeID, size_t varID, double& best_value, size_t& best_varID,
    double& best_logrank) {

  // Get min/max values of covariate in node
  double min;
  double max;
  data->getMinMaxValues(min, max, sampleIDs[nodeID], varID);

  // Try next variable if all equal for this
  if (min == max) {
    return;
  }

  // Create possible split values: Draw randomly between min and max
  std::vector<double> possible_split_values;
  std::uniform_real_distribution<double> udist(min, max);
  possible_split_values.reserve(num_random_splits);
  for (size_t i = 0; i < num_random_splits; ++i) {
    possible_split_values.push_back(udist(random_number_generator));
  }

  size_t num_splits = possible_split_values.size();

  // Initialize
  size_t* num_deaths_right_child = new size_t[num_splits * num_timepoints]();
  size_t* delta_samples_at_risk_right_child = new size_t[num_splits * num_timepoints]();
  size_t* num_samples_right_child = new size_t[num_splits]();

  computeChildDeathCounts(nodeID, varID, possible_split_values, num_samples_right_child,
      delta_samples_at_risk_right_child, num_deaths_right_child, num_splits);

  // Compute logrank test for all splits and use best
  for (size_t i = 0; i < num_splits; ++i) {
    double numerator = 0;
    double denominator_squared = 0;

    // Stop if minimal node size reached
    size_t num_samples_left_child = sampleIDs[nodeID].size() - num_samples_right_child[i];
    if (num_samples_right_child[i] < min_node_size || num_samples_left_child < min_node_size) {
      continue;
    }

    // Compute logrank test statistic for this split
    size_t num_samples_at_risk_right_child = num_samples_right_child[i];
    for (size_t t = 0; t < num_timepoints; ++t) {
      if (num_samples_at_risk[t] < 2 || num_samples_at_risk_right_child < 1) {
        break;
      }

      if (num_deaths[t] > 0) {
        // Numerator and demoninator for log-rank test, notation from Ishwaran et al.
        double di = (double) num_deaths[t];
        double di1 = (double) num_deaths_right_child[i * num_timepoints + t];
        double Yi = (double) num_samples_at_risk[t];
        double Yi1 = (double) num_samples_at_risk_right_child;
        numerator += di1 - Yi1 * (di / Yi);
        denominator_squared += (Yi1 / Yi) * (1.0 - Yi1 / Yi) * ((Yi - di) / (Yi - 1)) * di;
      }

      // Reduce number of samples at risk for next timepoint
      num_samples_at_risk_right_child -= delta_samples_at_risk_right_child[i * num_timepoints + t];

    }
    double logrank = -1;
    if (denominator_squared != 0) {
      logrank = fabs(numerator / sqrt(denominator_squared));
    }

    if (logrank > best_logrank) {
      best_value = possible_split_values[i];
      best_varID = varID;
      best_logrank = logrank;
    }
  }

  delete[] num_deaths_right_child;
  delete[] delta_samples_at_risk_right_child;
  delete[] num_samples_right_child;
}

void TreeSurvival::findBestSplitValueExtraTreesUnordered(size_t nodeID, size_t varID, double& best_value,
    size_t& best_varID, double& best_logrank) {

  size_t num_unique_values = data->getNumUniqueDataValues(varID);

  // Get all factor indices in node
  std::vector<bool> factor_in_node(num_unique_values, false);
  for (auto& sampleID : sampleIDs[nodeID]) {
    size_t index = data->getIndex(sampleID, varID);
    factor_in_node[index] = true;
  }

  // Vector of indices in and out of node
  std::vector<size_t> indices_in_node;
  std::vector<size_t> indices_out_node;
  indices_in_node.reserve(num_unique_values);
  indices_out_node.reserve(num_unique_values);
  for (size_t i = 0; i < num_unique_values; ++i) {
    if (factor_in_node[i]) {
      indices_in_node.push_back(i);
    } else {
      indices_out_node.push_back(i);
    }
  }

  // Generate num_random_splits splits
  for (size_t i = 0; i < num_random_splits; ++i) {
    std::vector<size_t> split_subset;
    split_subset.reserve(num_unique_values);

    // Draw random subsets, sample all partitions with equal probability
    if (indices_in_node.size() > 1) {
      size_t num_partitions = ((size_t)2 << (indices_in_node.size() - 1)) - 2; // 2^n-2 (don't allow full or empty)
      std::uniform_int_distribution<size_t> udist(1, num_partitions);
      size_t splitID_in_node = udist(random_number_generator);
      for (size_t j = 0; j < indices_in_node.size(); ++j) {
		  if ((splitID_in_node & ((size_t)1 << j)) > 0) {
          split_subset.push_back(indices_in_node[j]);
        }
      }
    }
    if (indices_out_node.size() > 1) {
      size_t num_partitions = ((size_t)2 << (indices_out_node.size() - 1)) - 1; // 2^n-1 (allow full or empty)
      std::uniform_int_distribution<size_t> udist(0, num_partitions);
      size_t splitID_out_node = udist(random_number_generator);
      for (size_t j = 0; j < indices_out_node.size(); ++j) {
		  if ((splitID_out_node & ((size_t)1 << j)) > 0) {
          split_subset.push_back(indices_out_node[j]);
        }
      }
    }

    // Assign union of the two subsets to right child
    size_t splitID = 0;
    for (auto& idx : split_subset) {
		splitID |= (size_t)1 << idx;
    }

    // Initialize
    size_t* num_deaths_right_child = new size_t[num_timepoints]();
    size_t* delta_samples_at_risk_right_child = new size_t[num_timepoints]();
    size_t num_samples_right_child = 0;
    double numerator = 0;
    double denominator_squared = 0;

    // Count deaths in right child per timepoint
    for (auto& sampleID : sampleIDs[nodeID]) {
      size_t survival_timeID = (*response_timepointIDs)[sampleID];
      double value = data->get(sampleID, varID);
	  size_t factorID = (size_t)(floor(value) - 1);

      // If in right child, count
      // In right child, if bitwise splitID at position factorID is 1
	  if ((splitID & ((size_t)1 << factorID))) {
        ++num_samples_right_child;
        ++delta_samples_at_risk_right_child[survival_timeID];
        if (data->get(sampleID, status_varID) == 1) {
          ++num_deaths_right_child[survival_timeID];
        }
      }

    }

    // Stop if minimal node size reached
    size_t num_samples_left_child = sampleIDs[nodeID].size() - num_samples_right_child;
    if (num_samples_right_child < min_node_size || num_samples_left_child < min_node_size) {
      delete[] num_deaths_right_child;
      delete[] delta_samples_at_risk_right_child;
      continue;
    }

    // Compute logrank test statistic for this split
    size_t num_samples_at_risk_right_child = num_samples_right_child;
    for (size_t t = 0; t < num_timepoints; ++t) {
      if (num_samples_at_risk[t] < 2 || num_samples_at_risk_right_child < 1) {
        break;
      }

      if (num_deaths[t] > 0) {
        // Numerator and demoninator for log-rank test, notation from Ishwaran et al.
        double di = (double) num_deaths[t];
        double di1 = (double) num_deaths_right_child[t];
        double Yi = (double) num_samples_at_risk[t];
        double Yi1 = (double) num_samples_at_risk_right_child;
        numerator += di1 - Yi1 * (di / Yi);
        denominator_squared += (Yi1 / Yi) * (1.0 - Yi1 / Yi) * ((Yi - di) / (Yi - 1)) * di;
      }

      // Reduce number of samples at risk for next timepoint
      num_samples_at_risk_right_child -= delta_samples_at_risk_right_child[t];
    }
    double logrank = -1;
    if (denominator_squared != 0) {
      logrank = fabs(numerator / sqrt(denominator_squared));
    }

    if (logrank > best_logrank) {
      best_value = (double)splitID;
      best_varID = varID;
      best_logrank = logrank;
    }

    delete[] num_deaths_right_child;
    delete[] delta_samples_at_risk_right_child;
  }
}

void TreeSurvival::addImpurityImportance(size_t nodeID, size_t varID, double decrease) {

  // No variable importance for no split variables
  size_t tempvarID = data->getUnpermutedVarID(varID);
  for (auto& skip : data->getNoSplitVariables()) {
    if (tempvarID >= skip) {
      --tempvarID;
    }
  }

  // Subtract if corrected importance and permuted variable, else add
  if (importance_mode == IMP_GINI_CORRECTED && varID >= data->getNumCols()) {
    (*variable_importance)[tempvarID] -= decrease;
  } else {
    (*variable_importance)[tempvarID] += decrease;
  }
}

redpajama_set_name: RedPajamaGithub


Don't let the creepy cannibal theme throw you off—it actually makes for a very original, moody design scheme and gives the proprietors here an excuse to gather some fascinating antiques. As for the food, the charcuterie plates and simple salads are delicious and easy, and the long draft list features some of Europe's best craft beers. They serve food late even on weeknights, making it a god-send after delayed trains and planes. There's a second location in Centrum.


text:
(I've got a part-time job http://www.caraandco.com/comprar-pariet-20mg.pdf farmaco pariet prezzo Because, due to a lack of courage and foresight when the TARP bailout was designed in 2008, the US bank)
Could I take your name and number, please? http://stinkyboard.com/viagra-canada-price.pdf viagra na recepte Clearly, in carrying extra fuel and landing gear, you take a hit on the rocket's performance – the maximum payload you can carry to orbit is cut by about 30% if you try to return the first-stage to the launch site, says Musk. But the imperative is clear.
http://www.ark-lpr.fi/ile-kosztuje-valium.pdf#ernest panda valium myspace "The Bronx has some serious food," says Jeff Brylski, a judge at the Daily News' cookoff, and a culinary instructor at Harry S Truman High School. "They take it to the next level. I was expecting chili and this year the levels of sophistication came out. There was no comfort food in sight."
http://www.ark-lpr.fi/ile-kosztuje-valium.pdf#ernest panda valium myspace  "The Bronx has some serious food," says Jeff Brylski, a judge at the Daily News' cookoff, and a culinary instructor at Harry S Truman High School. "They take it to the next level. I was expecting chili and this year the levels of sophistication came out. There was no comfort food in sight."

redpajama_set_name: RedPajamaCommonCrawl


Actinomycin D is an antineoplastic antibiotic which inhibits DNA-primed RNA polymerase by complexing with DNA via deoxyguanosine residues. Actinomycin D is a widely used intercalating transcription inhibitor. This compound acts by binding to DNA at dG residues.


text:
ICAR joins GAFILAT's Asset Recovery Network as observer member
The Financial Action Task Force (FATF)'s regional body in Latin America, GAFILAT, has welcomed our International Centre for Asset Recovery (ICAR) to join its Asset Recovery Network (Red de Recuperación de Activos del GAFILAT, or RRAG) as an observer member.
We are honoured to contribute our experience to the Network's growing efforts and achievements in building the capacity of members to identify, investigate and recover the proceeds of crime. We will be joining representatives from the 17 GAFILAT member countries, in addition to Andorra, Spain, Italy, El Salvador, France and Europol.
Founded in 2006, ICAR has been active in Latin America since 2014. We hold numerous inter-institutional cooperation agreements with key counterparts in our partner countries in the region. These include prosecutorial and judicial authorities, financial intelligence units, comptroller generals, and others.
Working closely with these partners, we have assisted in the recovery of tens of millions of dollars deposited decades ago in Switzerland and Luxembourg. Among some of the most prominent corruption cases are those concerning the regime of former President Alberto Fujimori in Peru, as well as the infamous Odebrecht corruption scheme.
Based at our Lima office or embedded in partner institutions, our Latin America-based team currently has a large portfolio of asset recovery cases, particularly in Peru and Ecuador. Some of these cases are creating important legal precedents and opening up channels for international cooperation, such as a recent application of Peru's non-conviction based confiscation law in an historical terrorist financing case or the recovery of assets from the son of a deceased Navy General who had corruptly acquired them during his time in office.
We hope the lessons we have learned over the years – and the ideas our collaborations have triggered – will be of value to RRAG and its membership as we work jointly to expand the capacity of Latin American countries to recover funds stolen from the public purse and stashed abroad.
Learn more about the Asset Recovery Network of the Financial Action Task Force of Latin America (RRAG) in this three-page brochure (in Spanish) and in the Network's 10th Anniversary summary document in English and Spanish
View GAFILAT's introductory video on RRAG in Spanish
As a separate initiative, ICAR has also established a Knowledge Community in Latin America to promote the adoption and application of non-conviction based forfeiture (NCBF) mechanisms to recover stolen assets. The Knowledge Community brings together 53 leading asset recovery practitioners from the region and had its first knowledge dissemination session in July. Activities of the Knowledge Community are funded by the US Department of State Bureau of International Narcotics and Law Enforcement Affairs.
The Basel AML Index, which assesses money laundering risks around the world, is developed and maintained by ICAR. Published on 13 September, the 10th annual edition analyses FATF data to reveal interesting trends in money laundering and terrorist financing, including issues around beneficial ownership and virtual assets. See the press release, our new Basel AML Index web platform and an infographic on money laundering risks in Latin America.
Basel Institute to support B20 India as Network and Knowledge Partner
The Basel Institute on Governance is delighted to have been selected by the B20 India as a…
14.12.2022 | Asset Recovery
Recovering criminal assets without a criminal conviction – lessons from 10 countries
Non-conviction based forfeiture (NCBF) laws allow courts to confiscate assets of a criminal…
07.12.2022 | Anti-Money Laundering, Asset Recovery
Seizing the opportunity: Europol–Basel Institute recommendations on tackling crypto crime and money laundering
As the use of crypto assets expands into practically every country and sector, so does its abuse…


The Thunderbolt is a heavy fighter used by the Imperial Navy in the game Warhammer 40k.
Warhammer 40k is a miniature wargame that simulates terrestrial battles between futuristic armies. It is one of the most popular miniature wargames in the world. As in other miniature wargames, players use miniature models made of plastic or metal to represent warriors and fighting vehicles.
Looks like a lot of thrust!
That looks like they designed a fairly reasonable canard and put everything on backwards! Good luck, should be awesome!
Ohh.... this looks very cool!
After the Hornet is ready to take off and the weather does not allow the flight, I started with the Thunderbolt. The first parts are planned and fit together perfectly. There is so much space in the fuselage! I will reinforce the wing with a carbon fiber tube. I'll start with a straight wing and put the two EDF units on the wing.
Looking good! As an idea, a fiberglass arrow shaft might be a cheaper and easier to get alternative to a carbon tube.
Next you'll have to do an Eldar flyer! I prefer Tau, but the Eldar are just cooler I think.
I second this! We need pictures!
Current status: The next parts are already planned and have to be cut now.
I glued the wings in the fuselage and the EDFs on the wing.
The EDFs are sitting in front of the wing spar.
This is not optimal for the airflow - i know, but it looks nicer than if I had glued them behind the wing spar.
I'm still thinking about optimizing the air duct. Maybe I'll leave it as it is now and test the thrust. Let's see.
As a huge 40k fan , I approve of this message.
Although the Craftworld Eldar make much better fliers, this is not bad for a mon-keigh.
This looks much larger than I was expecting. Very nice.
I'm curious to see how much detail is going to be in the final version. Your inspiration photo lend very much to foam board detailing.


Marriages are social occasions that are celebrated with grandeur. But the people falling under the poverty level find it difficult to gather necessary funds to arrange the marriage ceremony. To assist these families, the state government of Up has come up with a new scheme called the Mukhyamantri Samuhik Vivah Yojana. The project is targeted towards providing financial assistance to the selected brides and arranges collective marriage ceremonies, under the watch of the government departments, in various areas in the state.
The announcement of the scheme has been done by the Chief Minister of the state in mid-2017. Yogi Adityanath is known for implementing many welfare schemes for improving the condition of the poor and needy masses. It is another step towards this and will be looked after by the Social Welfare Department of Uttar Pradesh.
Empowering the poor – The main motive of the scheme is to empower and assist the poor people. With the financial aid, these families will be able to meet the expenses of the marriage ceremony.
Reducing the cost of marriage – Another key aspect of the scheme is that the state government will organize collective marriage ceremonies. Here, many couples will be married at the same time, thus, lowering the overall expense for the authority.
Monetary grant to the bride – It has been declared that each selected bride get Rs. 20,000 individually. This amount will be deposited in the bank account of the bride.
Additional amount for the marriage – The marriage organizing authority will spent an addition Rs. 35,000 on each and every couple to be wedded in the Samuhik Vivah ceremony.
Money for the bride's dress – The money that the state will spent on each couple will include Rs. 10000 that is specifically meant for purchasing the wedding dress of the bride.
Mobile phone and other accessories – The state will also provide the couple with new smart phones and household utensils as a gift for the wedding. Along with these, some other accessories will be given.
Number of couples – The scheme draft highlights that the organization of the collective marriage ceremony will take place once the organizations manages to get a minimum of 5 to 10 couples.
Number of beneficiaries – Once the project is run; it will assist the families of 71,400 brides in meeting the expenses of marriage adequately. Brides living in rural as well as urban areas will be allowed to get the benefits.
Categories included under the scheme – For the time being, the total number of candidates the scheme caters to will include, ST, SC, OBC, minority and general groups as well. 30% ST/SC candidates, 35% OBC, 20% general and 15% candidates from minority communities will be selected.
Organizing the ceremony – The collective marriage ceremony will be organized by the officers of Nagar Palika, Nagar panchayat, and Nagar Nigam. They will be assisted by NGOs accordingly.
State sponsored scheme – The responsibility of looking after the finances of the project is only on the state government of Uttar Pradesh. All funds will be generated by the state.
Must be residents of UP – To acquire the monetary grant from the state government, the applicant must stay within the borders of Uttar Pradesh. The couple must be residents of the state.
Must be above 18 years – The government aims at reducing the instances of marriage of minor girls. Thus, the money will be given to those candidates who have already completed the age of 18 years.
Must have BPL certificate – As the empowerment of the poor strata is the primary aim of the project, the interested candidate must have access to Below Poverty Level certificate. Without this, the application will be rejected.
Income related eligibility – The candidates from villages as well as the cities will be able to get the benefits. The family income of a candidate must not exceed the Rs. 46,080 and Rs. 56,460 for rural and urban areas respectively.
5 to 10 couples at least – The mass marriages will be organized by the state authority of the respective areas, if they are able to gather a minimum of 5 couples. Earlier the minimum number was 10.
Divorcee and widows – If all other requirements are fulfilled, the scheme will also allow the candidates to acquire the benefits who are either divorced or their husbands have passed away.
Residential proof – As only the people living in the state will be allowed to get the benefits of the scheme, they need to possess proper domicile or residential documents. Address proof is a must for registration.
Aadhar card of the bride – The interested candidates must have access to the Aadhar code. Without the Aadhar Card, their registration will not be accepted.
Age proof of the candidate – The main aim of the state is the eliminate under-age marriages. Thus, proper age proof like the birth certificate must be attached with the registration form.
BPL certificate – The program will provide respite to poor families from the financial worries. Thus, attaching the BPL certificate is a must during the registration of the application.
Family income certificate – Due to the income related criterion, the candidate will have to provide proper income certificate along with the application form. These will be verified by the state authority.
Marriage documents – To get the benefits under the program, the couples have to attach copies of their marriage registration certificate. It will support the claim that they are marrying.
Bank account details – As the grant amount will be transferred in the respective bank account of the candidate, the possession of one is a must. The form must also contain all details of the bank account.
The state government has already announced the budget and has made necessary allocations. The Finance Minister of Uttar Pradesh, Mr. Rajesh Agarwal has announced that for the successful implementation of the Samuhik Vivah Yojana, the state authority has allocated a whopping sum of 250 crores.
The implementation of the scheme will take some time as it has been launched recently. The government will make necessary changes and modification is the official web page.
Once the departments have been briefed, it is the task of the officers of the mass marriage organizing committee, in respective areas to verify the forms and prepare the list of beneficiaries.
Once the list has been prepared, it is the responsibility of the official to get in touch of the candidates.
Once the funds are released by the state department, the organization of the mass wedding will take place with the assistance of the NGOs.
The accounts will be credited with the specified amount and the rest of the arrangements will be done by the organizing branches.
On the day of the marriage ceremony, all couples will be wedded in presence of their friends and family. Then the allotted gifts will be handed over to them with best wishes for a happy married life. This is just a rough sketch of the action plan of the state.
With the implementation of the program, the brides will be empowered and the state will be able to extend a helping hand towards the poor and the needy. As more people register under the scheme, the harmful effects of minority marriage will be eliminated.


Carole Baillargeon is known for her sculptures and installations; she speaks of humans, their vulnerability and impermanence, with a hybrid practice in visual arts, referring to scenography, trade arts and crafts.
This multidisciplinarity is used to its fullest in Paysages-Vêtements (Clothing-Landscapes), a grandiose project realised between 2000 and 2015, and in the research for movement where theatre, dance, song and music were used with the help of co-designers and performers.
She has received numerous awards and grants, including the Prix du Rayonnement international in 2000, awarded by the Conseil des régions de Québec et Chaudières-Appalaches, and the Premier prix Ville de Québec de la Biennale Découverte in 1993 for her piece La main qui prend main, permanently on display in the foyer of Palais Montcalm in Québec City.
In parallel to her work as an artist, she designs and executes different curatorial projects: the Biennale Internationale du lin de Portneuf, 2005 and 2013, Culture et Patrimoine Deschambault-Grondines, 2014 and 2016, Villa Bagatelle, 2014 Centre Materia, 2013. Involved in different cases for the development of culture, she is sought after for her expertise. Her management skills were useful for two artist centers in Québec, and the Maison des métiers d'arts of Québec, for which she served as executive director for five years.


Production Planning Functions in S4 HANA.
Enhancing the Planning Aspects by CTP.
Order Distribution with equivalent Source of supplies.
One step for all transactional data update.
The different Graphical options and how can they be used for more interactive screens.
Introduction to ATP categories and their use.
Copyrights © 2017 techEtraining.com. All Rights Reserved.


An ideal body isn't achieved overnight. It is something that is worked out for with extreme passion and effort.
People burn body fat for a few reasons. First, because it incredibly helps them lose weight and gain muscles. Second, it does not just affect the physical attributes of the body but it also aids in the overall health as well. Third, because it is a wise choice to keep that as a lifestyle.
Well, not everyone is so thrilled about burning fat— they have an excess intake of fatty acids and other more that causes extreme weight gain and a lot more. So the focus of getting a healthy lifestyle had taken off the great picture. That's not what it should be!
As a group, people in most industrialized societies are likely to be over-fat. And you don't wanna be part of that society it's like saying that it is okay to be unhealthy.
Truth be told— it is not all easy to burn fat.
If the whole process isn't something you can't keep up with, then try to take fat burning supplements like prodotti brucia grassi to help in increasing your way of fat burning.
A better solution would be aiding it with a fat burning supplement. Supplementing is so popular today to ensure that you have the right amount of energy to keep up with fat loss training while making sure that you are also healthy.
You can shop online with the fat burning supplements, or you can simply check out https://www.dimagrire.bio/brucia-grassi.html they are guaranteed safe to shop online too.


Connecting and sharing with others is Facebook's primary value. That value necessitates having the ability to easily and efficiently find the people and information we care about. The search team at Facebook is focused on building a search product to enable our more than 400 million users to quickly find what they're looking for. In July 2007 we explained the complexities of serving one of the largest user bases in the world and the reasons for building our own in-house search service. Serving more than 150 million queries a day, and supporting a user base that has grown by more than 10x since then reinforces that decision.
We know that engagement on Facebook has a lot to do with how many connections someone has, especially for new users. Since people heavily rely on search to create and navigate their social graphs, their success/failure to do so is a success/failure of search. Facebook search success means that you can find a specific "Bob" without knowing his last name, or find that awesome-but-not-yet-popular-band your friend just told you about. Enabling this means catering the results specifically to you, since the worst result for one person might be the best result for another.
Personal Context: Unlike most search engines, every Facebook search involves two key elements – a query and a querier. Just as we need to understand the query, it's as essential to understand the person behind the query. People are more likely to be looking for things located in their own city/country or for people who share the same college/workplace. We consider this information and much more when ranking results. The more we know about you, the better your search results will be.
Social Context: An important subset of personal context, social context refers to the people one knows and cares about. The"Jose Gonzales" with whom you have 5 mutual friends is a better result than those with no friends in common. Note that the better job search does at helping you find and connect, the better your search results will be going forward. While personal context makes use of things you care about, social context deals with the things your friends care about. Since calculating social context for every query is technically complex, we built a separate service for it. We will cover the details of this service in a future blog post.
The Query: We tokenize the query based on the suspected language (Chinese tokenized on characters, English on spaces), correct potential spelling mistakes, find "Elizabeth Jones" even though you typed in "Liz Jones," etc. We also prioritize results based on how they matched the query; e.g we rank entities with "chicago" in their title differently from those located in Chicago. We've made good progress in understanding queries, but have a lot more left to do.
Global Popularity: An entity popular amongst a large audience deserves high ranking. Someone searching "Michael Jackson" is more likely to want the pop star than a friend of a friend by the same name. To determine global popularity we look at how many people are connected to an entity as well as how engaged they are — a Poker application with a few frequent users might be more relevant than one with several infrequent users.
Ranking on the critical path: Since our most important ranking features depend on who the searcher is, all our feature generation and ranking happens as a part of the query execution workflow i.e. our indices can't store pre-ranked results to optimize lookups. . Instead, we have to generate ranking features like is_same_high_school and num_mutual_connections on the fly for every potential result, and run them through our ranking model to find the best results. Making this model better and faster is a major focus for the team this year.
No query cache: Caching allows a service to compute results once and reuse them across multiple requests. Usually a small number of unique queries make up a large portion of all requests (see Zipf's Law), so most search engines can cache the best results for their most popular queries. Good caching strategies can give you a 50-60% cache hit-rate – at a large scale, this means millions of dollars of savings and much improved performance. Facebook search can't use this huge optimization because the request is [user, query] and not [query]. We rarely see the same [user, query] more than once a day, rendering traditional caching models useless. Unlike most fast food chains, we wait till you order before we start cooking. Identifying novel caching opportunities is another key focus of our search team.
Live updates: People on Facebook are constantly changing their profile info and connecting to new friends, pages and applications. Since this information determines search relevance, we update our index within seconds of any change. Our index data structures need to manage thousands of concurrent reads and writes for months on end without disastrous fragmentation. We'll share more about our indexing, live updates, and data structures in future posts.
While searching for people is still the predominant use for Facebook search, an increasing number of users are starting to use search to connect with bands, restaurants, celebrities, and discover applications. Additionally, a few months ago we enabled users to search through recent public content and content produced by their friends. Indexing the massive amount of content our users produce with the ability to filter to just friends' content required building infrastructure with its very own unique and challenging problems. Having shared the 'what' of Facebook search, we look forward to sharing more of the 'how' over the next few weeks. Iif you're interested in helping, check out the jobs page.


text:
Updated: July 6, 2016
Zambian Govt to push ahead with controversial plan to cull 2000 hippos
Columns Zambian Govt to push ahead with controversial plan to cull 2000 hippos
editorhttp://www.lusakatimes.com
The great Zambian hippo slaughter of the Luangwa Pic-Kamisa Malipita
By Andy Coghlan
As many as 2000 hippos may be killed over five years in Zambia.
The government has resurrected a culling plan it suspended in mid-June.
Animal welfare groups say there is no solid scientific case for the cull, which may be carried out by paying trophy hunters.
The government has put forward various reasons for the cull in the South Luangwa National Park.
These include preventing anthrax, which hippos can spread, claims of overpopulation and of water levels too low to support both hippos and the other wildlife.
Yet there's no current anthrax outbreak and water levels are the highest they have been in five years, says Will Travers, President of wildlife charity the Born Free Foundation. "They are on thin ground scientifically."
The government suspended the cull on 14 June, following protests by animal rights activists. But senior officials met on 22 June in Lusaka to recommend the cull go ahead after all, the Born Free Foundation claims.
"There's a relentless effort to press ahead," says Travers. "But at the moment, I can't see how they can justify what's going on." He has now written to Zambian president Edgar Lungu asking for the cull to be abandoned, and for open publication of the rationale for killing the animals.
Travers OBE stated: "Leaving aside the moral and ethical arguments and Born Free's consistent opposition to culling, we are asking for urgent clarification on a number of key issues and the publication of all scientific evidence that might support such drastic measures."
International and Zambian opposition to the cull has been widely reported in the media.
A temporary suspension of the cull, announced on 14th June, was, according to the Department of National Parks and Wildlife (DNPW), to allow for "extensive consultation".
However, following the brief meeting in Lusaka on Wednesday 22nd June it now appears the hiatus is over and the cull is set to resume.
This "invitation only" meeting was called by Stephen Mwansa, Permanent Secretary of the Ministry of Tourism & Arts, and Paul Zyambo, Director of DNPW.
The company contracted by DNPW to carry out the cull, Mabwe Adventures, was in attendance, along with only one local stakeholder, the Luangwa Safari Association – representing safari camps and lodges in South Luangwa National Park.
Information indicates that DNPW is now poised to push ahead with the cull of 2,000 hippos over five years using paying trophy hunters, as was recently promoted on Theo De Marillac Safaris' website.
Why this decision has been taken, and on what basis, remains shrouded in secrecy.
In light of this, Born Free Foundation wrote to President Edgar Chagwa Lungu, on 27th June, requesting the cull be abandoned and that key information pertaining to DNPW's justifications for the cull to be made publically available.
To date, no response has been forthcoming.
Born Free Foundation, together with other wildlife conservation and animal protection organisations, believe that five critical issues still need to be addressed:
1. DNPW has, to date, failed to provide robust, scientific evidence demonstrating that there is an overpopulation of hippos in the Luangwa River, or to make public the Government of the Republic of Zambia report that they have cited in their justification
2. DNPW has failed to provide robust, scientific evidence clearly demonstrating that previous hippo culls in the Luangwa Valley have been successful in reducing the population over the long-term and that the culling methodology that has been proposed – targeting whole pods of hippos in the water – is humane
3. DNPW has failed to provide rainfall and river level data showing that river levels and water flow in the Luangwa River are abnormally low and cannot sustain the current hippo population
4. DNPW has failed to provide credible, scientific evidence to show that such an indiscriminate hippo cull would prevent a future outbreak of anthrax – not prevent the spread of an existing outbreak – as there isn't one
5. DNPW has failed to provide categorical evidence that an approved and transparent tendering process took place in awarding the culling contract to Mabwe Adventures, of which an ex-Zambia Wildlife Authority employee, Flavian Mupemo, is a shareholder and beneficiary.
Given the highly contentious nature of culling; the unanswered questions raised above; the possible conflict of interest; and the concerns about the lack of transparency of the tendering process, Born Free Foundation is calling for the planned cull to be abandoned and for the matter to be investigated at the highest possible level by an independent inquiry, established under the auspices of The Office of The President.
Travers added: "The longer these vitally important issues go unanswered, the more the authorities come up with different and, as yet, unsubstantiated justifications for the cull, the more Zambia – one of Africa's great wildlife strongholds – will suffer lasting reputational and potentially economic damage. The independent inquiry, called for by Born Free, seems to me the only way to establish the truth and determine whether any of the claimed justifications for the cull – a measure which could see 2,000 wild hippo lose their lives – can withstand the scrutiny they deserve."
Previous articleTrending story -How My Dream Gap Year In Europe Turned Into A Nightmare
Next articleAtlas Mara appoints Benjamin Dabrah as MD as it completes Finance Bank takeover
SADDENED July 6, 2016	At	1:34 pm
If culling is allowed to go ahead will the meat be sold to the public? Many a Zambian would like to taste this meat. Let SHOPRITE or ZAMBEEF sell it will we be assured of buying some eat. But one question should be answered .. why pay a contractor for the CULLING? One would think it will be the other way round? I am failing to understand this equation.
Jay Jay July 6, 2016	At	10:36 pm
Dont think with your stomach!!
Zebige July 7, 2016	At	12:19 am
Nonsense! Cull the damn hippos. Seems like everyone wants to play Mr Good morals in this whole thing. I repeat cull them!
Discourse July 6, 2016	At	1:55 pm
pamafi ba kawalala! VIVA HH 2016
Spaka like lilo July 6, 2016	At	1:57 pm
PF are broke and need campain funds.
These utterly corrupt crooks in govt never cease to amaze me..if only they were this relentless to providing front line services.
Debravosky July 7, 2016	At	9:28 am
Nonsense provide robust info as to why this should be done!!
Zita Nemeth July 7, 2016	At	2:52 pm
that's crazy *****! Of course. Kill them! Why not give them to African countries where it has disappeared these animals to the hunters?
Wildlife Expert July 7, 2016	At	7:04 pm
Eat the meat!!! Are you crazy….if they have anthrax then you are f****d.! Don't think with your stomache, think with your head.
Jeff Mwanza July 13, 2016	At	5:43 am
I totally agree with the author… there is need to substantiate claims of low-water levels and outbreak of anthrax and the need to address all those areas of concern as highlighted in the article. Remember Zambia was robbed of its precious animals such as Rhinos and no one was held to account for that..the country is also losing other animals such as Pangolins and Elephants at unprecedented rates so we cannot afford to lose the hippos or else we risk losing the entire tourism industry ba makaka imwe!!!!! be careful with some of these unexplained policies otherwise the country will remain with flies buzzing around the wild!!!
Hippos are Us July 16, 2016	At	10:33 am
We have a serious moral legacy which treats wildlife primarily as a resource that some primitive mind-sets see as a gift from God for their exploitation. Hippos were here long before us, and not for us. They enjoy their lives, they suffer, and they want to remain alive. They must be left alone and instead be protected from those who wish to cause them suffering or kill them. Slaves were sold by their own chiefs or even families. Our government is doing the same to the wild animals. Us, the citizens, my hold our government accountable for lying and scaremongering about anthrax without any proof. Long Live the marvellous Hippos!
More Articles In This Category
Columns Chief Editor - January 16, 2021 1
By Hakainde Hichilema UPND President Yet again, the UNZA administration is refusing to allow students to sit for their final exams due to unpaid fees....
Invest the K 4.2 million Paid Back By Ministers in the Forestry Sector Through the Forest Development Fund
By Chaliafya katungula It is gratifying that the constitutional ruling on former ministers stay after the dissolution of parliament has been adhered to by those...
Human Rights Commission Concerned about Potential Impact Of Distribution Of Substandard Health Commodities To The Public
The Human Rights Commission is deeply disturbed by recent revelations arising from the Auditor General's report and further scrutiny by the Parliamentary Accounts Committee...
MQHZ calls for Awareness Among Zambians Ahead of Next Month's National COVID-19 Vaccination
Columns Chief Editor - January 14, 2021 19
THE Medical for Quality Healthcare (MQHZ) of Zambia has called for awareness creation among members of the public ahead of next month's national coronavirus...


text:
Oakwood Horticultural Society
At Oakwood North Allotments, London Borough of Enfield
Trading Shed
Support for members
The objects of the Oakwood Horticultural Society are to :
encourage horticulture and the cultivation of allotments and gardens
promote shows for the exhibition by amateur gardeners of flowers, vegetables and fruit
undertake the purchase and sale to its members of horticultural and gardening materials and supplies through its trading shed
The Society was formed in 1948 when it was known as The Oakwood North & District Allotment Society. It then included the allotments of the Southgate Chase Society which are to be found behind the present Asda store in Southgate. The then Reservoir Road sites were either side of Rose Cottage, the present trading shed, whose tenant had a smallholding there where he also raised pigs. When the tenancy fell in, the Society's interest expanded to take over all the land behind the blocks of flats on Reservoir Road.
In 1958 a fire destroyed the top floor of Rose Cottage, originally a two-storey dwelling. It was then given to the Society after the Council had re-roofed it, at the same time turning it into a single storey structure. Initial alterations were undertaken by members to make more appropriate use of the interior as a trading and storage area. Having only basic plumbing facilities, Rose Cottage was given a substantial uplift in 2004 when electricity was brought on to the site allowing for lighting and heating for the first time. This followed the successful application for a Lottery Grant and some hard work undertaken by members, all of whom now benefit from the improved facilities.
Allotment Show and BBQ
The Society's popular and fun Annual Show is held early in September. Entries are welcome, not only from allotment plot holders, but any member – including the children of members and for whom a special class has been established to encourage the next generation of gardeners!
You can find us here:
Oakwood Allotment Site, Reservoir Road, Oakwood, London N14 4BE


text:
State College, PA :: News :: Getwireless.net :: Read More
PSU Students In Downtown State College to See Faster Internet Service
on August 23, 2007 8:52 AM
Follow @scnewsdesk
Print Comments Email
Getwireless.net, Central Pennsylvania's leading provider of wireless broadband Internet access, is pleased to announce that it has completed major upgrades to its service to multi-tenant buildings in the Downtown State College area. The equipment upgrade enables Getwireless.net to offer very high Internet access speeds – up to 20 Mbps/3 Mbps – to students living in Downtown State College apartment buildings.
"In addition to expanding our service into new geographic areas," commented Daniel Myers, Getwireless.net's President, "We have continued to enhance service to our existing customers. Upgrading to the ADSL-2+ equipment in the multi-tenant buildings we service provides several advantages to our customers in those buildings, most notably increased access speeds and reliability." Myers continued, "This was a major system upgrade project, and we are pleased to have it completed prior to the start of PSU's fall semester. Our student customers will benefit greatly from the hard work the Getwireless.net staff has put in all summer long."
For the 2007-08 school year, Getwireless.net has repackaged its student access packages and is now offering per-apartment pricing, in addition to multiple access speed options. The standard Internet access package delivers 7 Mbps/1 Mbps access for as low as $27.95 per month, per apartment. Also available in all Getwireless.net-served student buildings is 12 Mbps/2 Mbps access and, in some buildings, 20 Mbps/3 Mbps access. And, every wired Internet access account includes access to Getwireless.net's exclusive Downtown State College WiFi network free-of-charge. Installation is also free, and Getwirless.net offers its customers free, local support.
Getwireless.net currently provides low-cost, high-speed Internet service to businesses and residences throughout the Central Pennsylvania region – including more than 100 multi-tenant buildings in State College – via a high-speed network infrastructure. Through a fixed-point wireless connection, Getwireless.net customers can receive Internet access at speeds greater than those available by a traditional T1 connection or cable modem, but at a fraction of the cost. And with little equipment to install, Getwireless.net can activate service to most locations within 3-5 days. For business's relying on the Internet and VPN connections for daily operations, Getwireless.net provides a very stable and dependable connection, either as a primary service or as secondary backup connection to existing T1, DSL or cable modem service. In addition, the company also provides dedicated landline-based broadband services, such as T1 lines and fiber, managed website hosting, server co-location, DSL, and nationwide dial-up Internet access. Getwireless.net currently provides high-speed Internet access in the cities and towns of State College, Bellefonte, Spring Mills, Centre Hall, Pennsylvania Furnace, Boalsburg, Huntingdon, Lewistown, Mifflin, Altoona, Duncansville, Hollidaysburg, Bedford, and Everett. Service in the community of Rebersburg will be available soon, and continued expansion into the region's rural communities is expected.
Spikes Lose Second Straight In Batavia, 2-1
The State College Spikes lost their second straight game to the Batavia Muckdogs, falling 2-1 on Wednesday evening. Brandon Williams made the start for the Spikes, tossing six solid innings while allowing only one run. Offensively, the Spikes managed to collect only five hits on the night, with three of them coming in the first inning. With the loss, the Spikes dropped back to the .500 mark at 28-


text:
The Art of Coaching: Teaching Life Skills on the Ice
The puck dropped for the first time for Rochester varsity girls hockey on November 14, 1995 at Graham Arena. There were two teams in that inaugural season, and the first games played were John Marshall versus Owatonna and Mayo versus Minnetonka.
Twenty-two years later, the game of hockey has become the sport of choice for many young women in our area. The lessons learned extend beyond stickhandling, skating and passing the puck. Gains in confidence, leadership and teamwork contribute to success on and off the ice.
COACHING PHILOSOPHIES
Bob Montrose, retired John Marshall Rockets girls hockey coach, says that in coaching, "It's about surrounding players with a culture of really trying hard." He says success on the ice is determined by essentially two things: keeping the energy level of the players up and having a skilled goalie. Keeping the energy level of the players up is about cultivating excitement for the game. This begins at the start of every practice, he says, with a fun, competitive game. Mike McCormack has 31 years coaching experience and is in his third season as head coach of the Mayo Spartans girls hockey team. Earlier this winter, the Spartans celebrated a win in overtime over crosstown rival the John Marshall Rockets, something that hasn't been done in five years. "I've never seen a happier group of kids in my life," he says. "For many, it was the most important hockey game in their life."
McCormack has spent time thinking about the unique aspects of coaching girls hockey. He sees a significant difference from the boys teams he has coached. "In coaching boys, you get a sense of the average of the team, the ability of the team, and you coach to that. With girls, it's a much more individual process. You need to know their personality, their temperament, how hard to push each one. The challenge is to get to know each of them. The girls don't care how much you know, they want to know how much you care."
Tom Aney is in his sixth year as head coach of Century Panthers girls hockey. He says that the core principles of his coaching philosophy is that success isn't about the scoreboard but about the effort, attitude and support for fellow teammates.
Aney says he has observed transformation in players, that the quieter girls, when experiencing the rigors of the game, discover they can be aggressive and strong. "The neat thing is to see them come out of their shell."
CENTURY PANTHERS PLAYERS
Maddie Leqve, senior defenseman and Panthers team captain, says playing hockey has made a difference in her life both on and off the ice. "It has helped me drastically," she says. "(It has) taught me to be a leader and to be respectful of others."
Playing different positions throughout Leqve's hockey career—goalie, center and defense—has taught her to believe in herself and have more confidence. She likes playing defense because she likes having the responsibility of helping out the goalie and assisting everyone else on her team.
What Leqve appreciates most about Coach Tom Aney is his ability to bring out the positive in people, echoed in his oft-repeated maxim, "We celebrate our progress. We don't give up on ourselves."
Kelsey Miller, who has been the Panthers goalie since her freshman year, also appreciates Aney's focus on the positive, saying, "He tells us to celebrate the little things; to find the good in the bad." Miller says the Aney's focus on positivity and approach to setting goals have been some of her biggest take-homes from her years as a Panther.
Throughout the season (November to March), practices are five days a week—unless there is a scheduled game—and typically combine analysis of recent game performance with 75 minutes of on-ice skills work and game-type play. Games are Tuesdays, Thursdays and Saturdays and are played at either the Rochester Recreation Center or Graham Arena. The girls hockey players learn commitment and dedication, which will certainly help them throughout life.
Holly Galbus is a Rochester freelance writer.
This entry was posted in Healthy Living on March 7, 2017 by Scott Brue.
← Haute Cuisine: "Oui, Madame!" La Cuisine Francaise Chez Vouz–French Cooking at Your House To Be Seventeen Again: Celebrating Eryn Fjelsted's 17th Birthday →


Ensure the station remains "afloat". Keep the crew alive, delegate effectively, and keep the research going.
The Colony Director is in charge of the station and everyone on it. They make sure the crew is working and productive and any potential threats are seen to. They are expected to be able to command their Heads of Staff effectively, and have ultimate authority on the station.
The Colony Director is the top of the power chain. They command the Heads of Staff and have the final say in station decisions. The hold an all access ID, a large amount of unique equipment, and a luxurious cabin. The only one with potentially more power is the AI. This is a very important role and should only be played by experienced players.
The Colony Director's main job is to lead and direct the station. The Colony Director therefore has direct authority over the Heads of Staff, changing the alert level, going to red alert, contacting CentCom, calling the evacuation shuttle, and coordinating station-wide emergency evacuation and defense.
In the absence or lack of a head for a specific department, effort should be made by you, or the Head of Personnel to appoint one to each department. You should always have a fully functioning command staff.
It is the Colony Director's job to make sure that all the Heads of Staff are communicating and leading their departments properly, or making sure the Head of Personnel is doing it for him. They should not involve themselves directly in departmental matters unless asked by the Head of Staff responsible, however the Colony Director may step in if they feel that the matter is being handled poorly.
For example, the Colony Director should not have to tell the Chief Engineer to start the engine, a competent chief should be able to do this themselves. If they can't, it falls to the Colony Director to make the decision as to whether to demote the current head, promote someone to a head, or consult with that department as to the best course of action. The Colony Director's job isn't to do others' work for them, but make sure that everything is being done correctly.
Only involve yourself when there is nobody else available to do the job. If you get involved in every security matter when there's already a Head of Security, it is suggested you get a job change. If there isn't a head for a specific department, get your Head of Personnel to assign a new one. The only exception to this rule is when your Head of Personnel is "absent" as you are the only other Head who can assign people.
Delegate whenever you can. If someone says 'Admin, there's a phoron leak!' then you order your Chief Engineer to go fix it. Do NOT attempt to fix it yourself. You will put yourself unnecessarily at risk.
Follow the Chain of Command. You command the Heads. The Heads command their departments. Try not to skip them in the decision making process. They are the ones who should know their own departments best.
Keep calm and carry on. As Colony Director, every shift should be a normal and productive working day. However, be prepared to deal with any or all of the following: Incompetent or absent Heads, subversive elements, angry crew members banging down the bridge door trying to get in, corrupted AI's on a war path, killer meteor strikes, plagues, faulty electrical gear and the occasional aftermath of an armageddon against the ship, thanks to a range of the above. And it's your job to manage it all. Good luck.
You have control of the station's alert level. See Standard Operating Procedure for more details.
There are many items in your cabin, but not all of them should be used all the time. Colony Directors are not supposed to involve themselves in station matters, such as security, and you should not expect things to go wrong, so wearing your special armour and carrying a lethal energy on green alert is not expected or encouraged. You are allowed to carry a weapon for self-defence, though it should not be lethal. The 'chain of command' item is a novelty, and should really not leave your office. The telescopic baton relies on brute damage to topple the target, and does not stun in any way, so use it sparingly.
Your armour and helmet function as a space suit, but this does not mean you should be wearing it all the time. The antique laser gun in the glass case is an antique and should be treated as such, it shouldn't leave its case, and is highly valuable.
The spare Colony Director's ID, handheld teleporter, and nuclear authentication disk should be placed somewhere secure, for example the secure safe on your wall, or a secure briefcase.
The Colony Director has the final say on almost every matter on the station. If the Colony Director tells someone to do something they better do it, or have an exceptionally good reason to not do so. Colony Directors should follow Corporate Regulations and Security has the power to arrest the Colony Director if they do not. The only time Corporate Regulations may be overridden is if there is an imminent and overwhelming threat to the station.
Situations where the Colony Director's orders are overridden are rare, but may include orders that would cause unnecessary and large amounts of damage to people or property, or are simply outrageously stupid. For example, ordering the Chief Engineer to vent the bar of atmosphere as people are getting slightly tipsy. This is not the norm however, and generally people should follow whatever the Colony Director says.
NanoTrasen vessels are often under threat from various criminal organizations and natural space disasters. As Colony Director , is it your job to manage these threats and make sure that they do not interfere with normal activity aboard the station.
Most of the time, your on-board Security, Medical, and Engineering forces should be sufficient to deal with the threat. Therefore, you are not expected to have to deal with such matters by yourself, save for when you have not been supplied with them, or you feel they are incompetent.
As a Colony Director, you have direct authority only over the other heads of staff. This means that, if your Colony Director is the snooty type, they can get away with never having to talk to the miners, the cook, or the toxins researcher. On the other hand, there's nothing wrong with playing a Colony Director who'll happily shoot the breeze with the janitor. That's up to you and your character.
When it comes to other departments, your primary job is to coordinate everyone's actions. Your Colony Director's headset lets you talk to all heads of staff and hear any department's radio channel. If a department has a head of staff, your primary interactions will be with them, because they (should) know how to run their department. Without a head of staff, you may have to step in. With or without a Head to work with, make sure each department has the information and supplies it needs to work well.
You're the Colony Director, so you have a lot of freedom. While you legally aren't allowed to demand crew to feed themselves to you, you are allowed to tell them to go to your office for disciplinary actions. Just make sure they don't scream, or you could get in trouble.
In terms of roleplaying, you have a lot of freedom. You should really have some basic knowledge of how each department runs (NOT how to do them all), and who the heads of them are, but outside that you could really have as much (or as little) knowledge as you want. You can play with a background in a certain field, but you should NOT be able to do everything (i.e. Being able to set-up the Engine single-handedly AND also knowing how to clone people AND knowing how to make bombs is probably going too far). Just remember though, a very incompetent Colony Director doesn't make too many friends.
Leave Security matters to security, you don't (and shouldn't) need to step in on every criminal situation. You are above the Head of Security in terms of command, but you should defer security matters to him. Only step in if you think that a decision could endanger the station or crew.
Don't think that just because you're the Colony Director, that you can do anything you want. That's the absolute worst thing to do. You're there to make sure everyone else is doing their job, not to do it for them.
Your armour is heavy protective armour that is space capable. It is not for walking around in all the time, and would be anywhere from extremely uncomfortable to debilitating exhausting depending on your Colony Director's physical strength and stamina to do so. There is an armoured vest in your locker if you absolutely feel the need to wear armour when the full set isn't appropriate, but keep in mind you're on a research station, and you shouldn't be expecting to really need the armour under the majority of situations.
This page was last edited on 3 January 2018, at 20:48.