text:
import * as utils from "base/utils";
import Component from "base/component";
import axisSmart from "helpers/d3.axisWithLabelPicker";

const precision = 1;

//constants
const class_playing = "vzb-playing";
const class_loading = "vzb-ts-loading";
const class_hide_play = "vzb-ts-hide-play-button";
const class_dragging = "vzb-ts-dragging";
const class_axis_aligned = "vzb-ts-axis-aligned";
const class_show_value = "vzb-ts-show-value";
const class_show_value_when_drag_play = "vzb-ts-show-value-when-drag-play";

//margins for slider
const profiles = {
  small: {
    margin: {
      top: 7,
      right: 15,
      bottom: 10,
      left: 60
    },
    radius: 8,
    label_spacing: 5
  },
  medium: {
    margin: {
      top: 0,
      right: 15,
      bottom: 10,
      left: 50
    },
    radius: 9,
    label_spacing: 5
  },
  large: {
    margin: {
      top: -5,
      right: 15,
      bottom: 10,
      left: 75
    },
    radius: 11,
    label_spacing: 8
  }
};

const presentationProfileChanges = {
  "medium": {
    margin: {
      top: 9
    }
  },
  "large": {
    margin: {
    }
  }
};

const TimeSlider = Component.extend({
  /**
   * Initializes the timeslider.
   * Executed once before any template is rendered.
   * @param model The model passed to the component
   * @param context The component's parent
   */
  init(model, context) {

    this.name = "gapminder-timeslider";
    this.template = this.template || require("./timeslider.html");
    this.prevPosition = null;
    //define expected models/hooks for this component
    this.model_expects = [{
      name: "time",
      type: "time"
    }, {
      name: "marker",
      type: "marker"
    }, {
      name: "ui",
      type: "ui"
    }];

    const _this = this;
    //binds methods to this model
    this.model_binds = {
      "change:time": function(evt, path) {
        if (_this.slide) {
          if ((["time.start", "time.end"]).indexOf(path) !== -1) {
            if (!_this.xScale) return;
            _this.changeLimits();
          }
          _this._optionClasses();
          //only set handle position if change is external
          if (!_this.model.time.dragging) _this._setHandle(_this.model.time.playing);
        }
      },
      "change:time.start": function(evt, path) {
        if (_this.slide) {
          //only set handle position if change is external
          if (!_this.model.time.dragging) _this._setHandle(_this.model.time.playing);
          _this.ready();
        }
      },
      "change:time.end": function(evt, path) {
        if (_this.slide) {
          //only set handle position if change is external
          if (!_this.model.time.dragging) _this._setHandle(_this.model.time.playing);
          _this.ready();
        }
      },
      "change:time.offset": function(evt, path) {
        if (_this.slide) {
          _this._updateProgressBar();
          _this.model.marker.listenFramesQueue(null, time => {
            _this._updateProgressBar(time);
          });
        }
      },
      "change:time.startSelected": function(evt, path) {
        if (_this.slide) {
          _this.updateSelectedStartLimiter();
        }
      },
      "change:time.endSelected": function(evt, path) {
        if (_this.slide) {
          _this.updateSelectedEndLimiter();
        }
      },
      "change:marker.select": function(evt, path) {
        if (path.indexOf("select.labelOffset") !== -1) return;

        _this.setSelectedLimits();
      }
    };

    // Same constructor as the superclass
    this._super(model, context);

    this.profiles = utils.deepClone(profiles);
    this.presentationProfileChanges = utils.deepClone(presentationProfileChanges);

    if ((this.model.ui.chart || {}).margin) {
      this.model.on("change:ui.chart.margin", (evt, path) => {
        const layoutProfile = _this.getLayoutProfile();
        if (layoutProfile !== "small") {
          const profile = _this.profiles[layoutProfile];
          profile.margin.left = _this.model.ui.chart.margin.left;
        }
        if (_this.slide) {
          _this.updateSize();
        }
      });
    }

    // Sort of defaults. Actually should be in ui default or bubblechart.
    // By not having "this.model.ui =" we prevent it from going to url (not defined in defaults)
    // Should be in defaults when we make components config part of external config (& every component gets own config)
    this.ui = utils.extend({
      show_ticks: false,
      show_value: false,
      show_value_when_drag_play: true,
      show_button: true,
      axis_aligned: false
    }, model.ui.getPlainObject(), this.ui);

    //defaults
    this.width = 0;
    this.height = 0;
    this.availableTimeFrames = [];
    this.completedTimeFrames = [];
    this.getValueWidth = utils.memoize(this.getValueWidth);
    this._setTime = utils.throttle(this._setTime, 50);
  },

  //template is ready
  readyOnce() {

    const _this = this;

    //DOM to d3
    //TODO: remove this ugly hack
    this.element = utils.isArray(this.element) ? this.element : d3.select(this.element);

    //html elements
    this.slider_outer = this.element.select(".vzb-ts-slider");
    this.slider = this.slider_outer.select("g");
    this.axis = this.element.select(".vzb-ts-slider-axis");
    this.select = this.element.select(".vzb-ts-slider-select");
    this.progressBar = this.element.select(".vzb-ts-slider-progress");
    this.slide = this.element.select(".vzb-ts-slider-slide");
    this.forecastBoundary = this.element.select(".vzb-ts-slider-forecastboundary");
    this.handle = this.element.select(".vzb-ts-slider-handle");
    this.valueText = this.element.select(".vzb-ts-slider-value");
    this.playButtons = this.element.select(".vzb-ts-btns");

    this.element.select(".vzb-ts-btn-play").on("click", () => {
      _this.model.time.play();
    });

    this.element.select(".vzb-ts-btn-pause").on("click", () => {
      _this.model.time.pause("soft");
    });

    this.forecastBoundary.on("click", () => {
      _this._setTime(_this.model.time.endBeforeForecast);
    });

    //Scale
    this.xScale = d3.scaleUtc()
      .clamp(true);

    //Axis
    this.xAxis = axisSmart("bottom");

    //Value
    this.valueText.classed("stroke", true);
    if (!this.slider.style("paint-order").length) {
      this.slider.insert("text", ".vzb-ts-slider-value")
        .attr("class", "vzb-ts-slider-value stroke");

      this.valueText.classed("stroke", false);
    }
    this.valueText = this.element.selectAll(".vzb-ts-slider-value");
    this.valueText.attr("text-anchor", "middle").attr("dy", "-0.7em");

    const brushed = _this._getBrushed();
    const brushedEnd = _this._getBrushedEnd();

    //Brush for dragging
    // this.brush = d3.brushX()
    //   //.x(this.xScale)
    //   .extent([[0, 0], [0, 0]])
    //   .on("start brush", function () {
    //     brushed.call(this);
    //   })
    //   .on("end", function () {
    //     brushedEnd.call(this);
    //   });

    // //Slide
    // this.slide.call(this.brush);

    this.brush = d3.drag()
      //.on("start.interrupt", function() { _this.slide.interrupt(); })
      .on("start drag", function() {
        brushed.call(this);
      })
      .on("end", function() {
        brushedEnd.call(this);
      });

    //Slide
    this.slide.call(this.brush);

    this.slider_outer.on("mousewheel", () => {
      //do nothing and dont pass the event on if we are currently dragging the slider
      if (_this.model.time.dragging) {
        d3.event.stopPropagation();
        d3.event.preventDefault();
        d3.event.returnValue = false;
        return false;
      }
    });

    //this.slide.selectAll(".extent,.resize")
    //  .remove();

    this._setSelectedLimitsId = 0; //counter for setSelectedLimits

    if (this.model.time.startSelected > this.model.time.start) {
      _this.updateSelectedStartLimiter();
    }

    if (this.model.time.endSelected < this.model.time.end) {
      _this.updateSelectedEndLimiter();
    }

    // special for linechart: resize timeslider to match time x-axis length
    this.parent.on("myEvent", (evt, params) => {
      const layoutProfile = _this.getLayoutProfile();
      const profile = _this.profiles[layoutProfile];

      if (params.profile && params.profile.margin) {
        profile.margin = params.profile.margin;
      }

      // set the right margin that depends on longest label width
      _this.element.select(".vzb-ts-slider-wrapper")
        .style("right", `${params.mRight - profile.margin.right}px`);

      _this.updateSize([0, params.rangeMax]);
    });

    this.on("resize", () => {
      _this.updateSize();
    });
  },

  //template and model are ready
  ready() {
    if (this.model.time.splash) return;

    if (!this.model.time._ready) return utils.warn("TODO timeslider is fired ready event while time model is not ready yet! how come?");

    const _this = this;

    this.element.classed(class_loading, false);

    this.changeLimits();
    this.changeTime();
    this.updateSize();

    _this._updateProgressBar();
    _this.model.marker.listenFramesQueue(null, time => {
      _this._updateProgressBar(time);
    });
    _this.setSelectedLimits(true);
  },

  changeLimits() {
    const minValue = this.model.time.start;
    const maxValue = this.model.time.end;
    //scale
    this.xScale.domain([minValue, maxValue]);
    //axis
    this.xAxis.tickValues([minValue, maxValue])
      .tickFormat(this.model.time.getFormatter("ui"));
  },

  changeTime() {
    //time slider should always receive a time model
    const time = this.model.time.value;
    //special classes
    this._optionClasses();
  },

  /**
   * Executes everytime the container or vizabi is resized
   * Ideally,it contains only operations related to size
   */
  updateSize(range) {
    if (this.model.time.splash) return;

    this.model.time.pause();

    this.profile = this.getActiveProfile(this.profiles, this.presentationProfileChanges);

    const slider_w = parseInt(this.slider_outer.style("width"), 10) || 0;
    const slider_h = parseInt(this.slider_outer.style("height"), 10) || 0;

    if (!slider_h || !slider_w) return utils.warn("time slider resize() aborted because element is too small or has display:none");

    this.width = slider_w - this.profile.margin.left - this.profile.margin.right;
    this.height = slider_h - this.profile.margin.bottom - this.profile.margin.top;
    const _this = this;

    //translate according to margins
    this.slider.attr("transform", "translate(" + this.profile.margin.left + "," + this.profile.margin.top + ")");

    this.xScale.range(range || [0, this.width]);

    this.slide
      .attr("transform", "translate(0," + this.height / 2 + ")")
      .attr("x1", this.xScale.range()[0])
      .attr("x2", this.xScale.range()[1])
      .style("stroke-width", this.profile.radius * 2 + "px");
    //.call(this.brush
    //.extent([[this.xScale.range()[0], 0], [this.xScale.range()[1], this.height]]));

    //adjust axis with scale
    this.xAxis = this.xAxis.scale(this.xScale)
      .tickSizeInner(0)
      .tickSizeOuter(0)
      .tickPadding(this.profile.label_spacing)
      .tickSizeMinor(0, 0);

    this.axis.attr("transform", "translate(0," + this.height / 2 + ")")
      .classed("vzb-hidden", this.model.ui.presentation)
      .call(this.xAxis);

    this.select.attr("transform", "translate(0," + this.height / 2 + ")");
    this.progressBar.attr("transform", "translate(0," + this.height / 2 + ")");

    this.slide.select(".background")
      .attr("height", this.height);

    //size of handle
    this.handle.attr("transform", "translate(0," + this.height / 2 + ")")
      .attr("r", this.profile.radius);

    this.sliderWidth = _this.slider.node().getBoundingClientRect().width;

    const forecastBoundaryIsOn = this.model.time.end > this.model.time.endBeforeForecast;
    this.forecastBoundary
      .classed("vzb-hidden", !forecastBoundaryIsOn);

    if (forecastBoundaryIsOn) {
      this.forecastBoundary
        .attr("transform", "translate(0," + this.height / 2 + ")")
        .attr("x1", this.xScale(this.model.time.endBeforeForecast) - this.profile.radius / 2)
        .attr("x2", this.xScale(this.model.time.endBeforeForecast) + this.profile.radius / 2)
        .attr("y1", this.profile.radius)
        .attr("y2", this.profile.radius);
    }

    this.resizeSelectedLimiters();
    this._resizeProgressBar();
    this._setHandle();

    this.playButtons.style("width", this.profile.margin.left + "px");
  },

  setSelectedLimits(force) {
    const _this = this;
    this._setSelectedLimitsId++;
    const _setSelectedLimitsId = this._setSelectedLimitsId;

    const select = _this.model.marker.select;
    if (select.length == 0) {
      if (_this.model.time.start != null && _this.model.time.end != null) {
        _this.model.time.set({
          startSelected: new Date(_this.model.time.start),
          endSelected: new Date(_this.model.time.end)
        }, null, false  /*make change non-persistent for URL and history*/);
      }
      return;
    }
    const KEYS = utils.unique(this.model.marker._getAllDimensions({ exceptType: "time" }));
    const proms = [];
    utils.forEach(select, entity => {
      proms.push(_this.model.marker.getEntityLimits(utils.getKey(entity, KEYS)));
    });
    Promise.all(proms).then(limits => {
      if (_setSelectedLimitsId != _this._setSelectedLimitsId) return;
      const first = limits.shift();
      let min = first.min;
      let max = first.max;
      utils.forEach(limits, limit => {
        if (min - limit.min > 0) min = limit.min;
        if (max - limit.max < 0) max = limit.max;
      });
      _this.model.time
        .set({
          startSelected: d3.max([min, new Date(_this.model.time.start)]),
          endSelected: d3.min([max, new Date(_this.model.time.end)])
        }, force, false  /*make change non-persistent for URL and history*/);
    });
  },

  updateSelectedStartLimiter() {
    const _this = this;
    this.select.select("#clip-start-" + _this._id).remove();
    this.select.select(".selected-start").remove();
    if (this.model.time.startSelected && this.model.time.startSelected > this.model.time.start) {
      this.select.append("clipPath")
        .attr("id", "clip-start-" + _this._id)
        .append("rect");
      this.select.append("path")
        .attr("clip-path", "url(" + location.pathname + "#clip-start-" + _this._id + ")")
        .classed("selected-start", true);
      this.resizeSelectedLimiters();
    }
  },

  updateSelectedEndLimiter() {
    const _this = this;
    this.select.select("#clip-end-" + _this._id).remove();
    this.select.select(".selected-end").remove();
    if (this.model.time.endSelected && this.model.time.endSelected < this.model.time.end) {
      this.select.append("clipPath")
        .attr("id", "clip-end-" + _this._id)
        .append("rect");
      this.select.append("path")
        .attr("clip-path", "url(" + location.pathname + "#clip-end-" + _this._id + ")")
        .classed("selected-end", true);
      this.resizeSelectedLimiters();
    }
  },

  resizeSelectedLimiters() {
    const _this = this;
    this.select.select(".selected-start")
      .attr("d", "M0,0H" + this.xScale(this.model.time.startSelected));
    this.select.select("#clip-start-" + _this._id).select("rect")
      .attr("x", -this.height / 2)
      .attr("y", -this.height / 2)
      .attr("height", this.height)
      .attr("width", this.xScale(this.model.time.startSelected) + this.height / 2);
    this.select.select(".selected-end")
      .attr("d", "M" + this.xScale(this.model.time.endSelected) + ",0H" + this.xScale(this.model.time.end));
    this.select.select("#clip-end-" + _this._id).select("rect")
      .attr("x", this.xScale(this.model.time.endSelected))
      .attr("y", -this.height / 2)
      .attr("height", this.height)
      .attr("width", this.xScale(this.model.time.end) - this.xScale(this.model.time.endSelected) + this.height / 2);
  },

  _resizeProgressBar() {
    const _this = this;
    this.progressBar.selectAll("path")
      .each(function(d) {
        d3.select(this)
          .attr("d", "M" + _this.xScale(d[0]) + ",0H" + _this.xScale(d[1]));
      });
  },

  _updateProgressBar(time) {
    const _this = this;
    if (time) {
      if (_this.completedTimeFrames.indexOf(time) != -1) return;
      _this.completedTimeFrames.push(time);
      let next = _this.model.time.incrementTime(time);
      const prev = _this.model.time.decrementTime(time);
      if (next > _this.model.time.end) {
        if (time - _this.model.time.end == 0) {
          next = time;
          time = prev;
        } else {
          return;
        }
      }
      if (_this.availableTimeFrames.length == 0 || _this.availableTimeFrames[_this.availableTimeFrames.length - 1][1] < time) {
        _this.availableTimeFrames.push([time, next]);
      } else if (next < _this.availableTimeFrames[0][0]) {
        _this.availableTimeFrames.unshift([time, next]);
      } else {
        for (let i = 0; i < _this.availableTimeFrames.length; i++) {
          if (time - _this.availableTimeFrames[i][1] == 0) {
            if (i + 1 < _this.availableTimeFrames.length && next - _this.availableTimeFrames[i + 1][0] == 0) {
              _this.availableTimeFrames[i][1] = _this.availableTimeFrames[i + 1][1];
              _this.availableTimeFrames.splice(i + 1, 1);
            } else {
              _this.availableTimeFrames[i][1] = next;
            }
            break;
          }
          if (next - _this.availableTimeFrames[i][0] == 0) {
            _this.availableTimeFrames[i][0] = time;
            break;
          }
          if (time - _this.availableTimeFrames[i][1] > 0 && next - _this.availableTimeFrames[i + 1][0] < 0) {
            _this.availableTimeFrames.splice(i + 1, 0, [time, next]);
            break;
          }
        }
      }

      let lastIndex;
      if (_this.availableTimeFrames.some((range, index) => {
        if (!(range[0] - _this.stepLimits[0]) && !(range[1] - _this.stepLimits[1])) {
          lastIndex = index;
          return true;
        }
      })) _this.availableTimeFrames = _this.availableTimeFrames.slice(lastIndex, 1);

    } else {
      const steps = _this.model.time.getAllSteps();
      _this.stepLimits = [steps[0], steps[steps.length - 1]];
      _this.availableTimeFrames = [];
      _this.completedTimeFrames = [];
    }

    const progress = this.progressBar.selectAll("path").data(_this.availableTimeFrames);
    progress.exit().remove();
    progress.enter()
      .append("path")
      .attr("class", "domain")
      .merge(progress)
      .each(function(d) {
        const element = d3.select(this);
        element.attr("d", "M" + _this.xScale(d[0]) + ",0H" + _this.xScale(d[1]))
          .classed("rounded", _this.availableTimeFrames.length == 1);

      });
  },

  /**
   * Returns width of slider text value.
   * Parameters in this function needed for memoize function, so they are not redundant.
   */
  getValueWidth(layout, value) {
    return this.valueText.node().getBoundingClientRect().width;
  },

  /**
   * Gets brushed function to be executed when dragging
   * @returns {Function} brushed function
   */
  _getBrushed() {
    const _this = this;
    return function() {

      if (_this.model.time.playing)
        _this.model.time.set("playing", false, null, false);

      _this._optionClasses();
      _this.element.classed(class_dragging, true);

      let value;// = _this.brush.extent()[0];
      //var value = d3.brushSelection(_this.slide.node());

      //if(!value) return;

      //set brushed properties

      if (d3.event.sourceEvent) {
        // Prevent window scrolling on cursor drag in Chrome/Chromium.
        d3.event.sourceEvent.preventDefault();

        _this.model.time.dragStart();
        let posX = utils.roundStep(Math.round(d3.mouse(this)[0]), precision);
        const maxPosX = _this.width;

        const forecastBoundaryIsOn = _this.model.time.end > _this.model.time.endBeforeForecast;
        const forecastBoundaryPos = _this.xScale(_this.model.time.endBeforeForecast);
        const snappyMargin = 0.5 * _this.handle.attr("r");

        if (posX > maxPosX) {
          posX = maxPosX;
        } else if (posX < 0) {
          posX = 0;
        } else if ((Math.abs(posX - forecastBoundaryPos) < snappyMargin) && !d3.event.sourceEvent.shiftKey && forecastBoundaryIsOn) {
          posX = forecastBoundaryPos;
        }

        value = _this.xScale.invert(posX);
        //set handle position
        _this.handle.attr("cx", posX);
        _this.valueText.attr("transform", "translate(" + posX + "," + (_this.height / 2) + ")");
        _this.valueText.text(_this.model.time.formatDate(value, "ui"));
      }

      //set time according to dragged position
      if (value - _this.model.time.value !== 0) {
        _this._setTime(value);
      }
    };
  },

  /**
   * Gets brushedEnd function to be executed when dragging ends
   * @returns {Function} brushedEnd function
   */
  _getBrushedEnd() {
    const _this = this;
    return function() {
      _this._setTime.recallLast();
      _this.element.classed(class_dragging, false);
      _this.model.time.dragStop();
      _this.model.time.snap();
    };
  },

  /**
   * Sets the handle to the correct position
   * @param {Boolean} transition whether to use transition or not
   */
  _setHandle(transition) {
    const _this = this;
    const value = this.model.time.value;
    //this.slide.call(this.brush.extent([value, value]));
    const new_pos = this.xScale(value);
    //this.brush.move(this.slide, [new_pos, new_pos])

    this.element.classed("vzb-ts-disabled", this.model.time.end <= this.model.time.start);
    //    this.valueText.text(this.model.time.formatDate(value));

    //    var old_pos = this.handle.attr("cx");
    //var new_pos = this.xScale(value);
    if (_this.prevPosition == null) _this.prevPosition = new_pos;
    const delayAnimations = new_pos > _this.prevPosition ? this.model.time.delayAnimations : 0;
    if (transition) {
      this.handle.attr("cx", _this.prevPosition)
        .transition()
        .duration(delayAnimations)
        .ease(d3.easeLinear)
        .attr("cx", new_pos);

      this.valueText.attr("transform", "translate(" + _this.prevPosition + "," + (this.height / 2) + ")")
        .transition("text")
        .delay(delayAnimations)
        .text(this.model.time.formatDate(value, "ui"));
      this.valueText
        .transition()
        .duration(delayAnimations)
        .ease(d3.easeLinear)
        .attr("transform", "translate(" + new_pos + "," + (this.height / 2) + ")");
    } else {
      this.handle
        //cancel active transition
        .interrupt()
        .attr("cx", new_pos);

      this.valueText
        //cancel active transition
        .interrupt()
        .interrupt("text")
        .transition("text");
      this.valueText
        .attr("transform", "translate(" + new_pos + "," + (this.height / 2) + ")")
        .text(this.model.time.formatDate(value, "ui"));
    }
    _this.prevPosition = new_pos;

  },

  /**
   * Sets the current time model to time
   * @param {number} time The time
   */
  _setTime(time) {
    //update state
    const _this = this;
    //  frameRate = 50;

    //avoid updating more than once in "frameRate"
    //var now = new Date();
    //if (this._updTime != null && now - this._updTime < frameRate) return;
    //this._updTime = now;
    const persistent = !this.model.time.dragging && !this.model.time.playing;
    _this.model.time.getModelObject("value").set(time, false, persistent); // non persistent
  },

  /**
   * Applies some classes to the element according to options
   */
  _optionClasses() {
    //show/hide classes

    const show_ticks = this.ui.show_ticks;
    const show_value = this.ui.show_value;
    const show_value_when_drag_play = this.ui.show_value_when_drag_play;
    const axis_aligned = this.ui.axis_aligned;
    const show_play = (this.ui.show_button) && (this.model.time.playable);

    this.xAxis.labelerOptions({
      scaleType: "time",
      removeAllLabels: !show_ticks,
      limitMaxTickNumber: 3,
      showOuter: false,
      toolMargin: {
        left: 10,
        right: 10,
        top: 0,
        bottom: 30
      },
      fitIntoScale: "optimistic"
    });

    this.element.classed(class_hide_play, !show_play);
    this.element.classed(class_playing, this.model.time.playing);
    this.element.classed(class_show_value, show_value);
    this.element.classed(class_show_value_when_drag_play, show_value_when_drag_play);
    this.element.classed(class_axis_aligned, axis_aligned);
  }
});

export default TimeSlider;

redpajama_set_name: RedPajamaGithub


text:
BOND PROPOSAL
Supporters of the Measure "E" school bond had an artist's rendering and information about the bond available at the Friday night football game on Sept. 7. Here, Tim Fitzgerald and Debbie Megenney, at right, explain a little bit about the proposal for interested passersby. The bond is for $25 million and the maximum impact for voters would be $30 per $100,000 of assessed valuation, according to school district officials. Bond money would be used for upgrading the athletic facilities at the high school, including a new stadium and a new all-weather track for year-round use. Modernization of classrooms would also be part of the bond project; Measure E will go before voters in November.
Marg Jackson/The Times

redpajama_set_name: RedPajamaCommonCrawl


text:
Владислав Клімчак (19 вересня 1878, Танява — 17 березня 1929, Львів) — архітектор, професор Львівської політехніки.

Біографія
Народився в селі Танява поблизу Болехова в родині лісничого Яна Клімчака та Пауліни Бабель. Середню школу закінчив у Новому Сончі. 1903 року закінчив відділ архітектури у Політехнічній школі. Серед викладачів зокрема Едгар Ковач і Теодор Тальовський. У 1903—1920 роках працював у міському будівельному управлінні Львова, де спеціалізувався на будівництві медичних установ. Від 1920 професор надзвичайний Львіської політехніки, від 1925 — професор звичайний.

Від 19 грудня 1904 року був членом Політехнічного товариства у Львові. Повторно — у 1920—1928 роках. У 1921 і 1922 входив до правління товариства. Належав до Кола польських архітекторів у Львові, 4 листопада 1927 року був обраний до його правління «членом-заступником». Член Палати інженерів. У своїх проєктах багато уваги приділяв якісному розплануванню. Займався питанням поєднання стилістики історичної та сучасної. Часто проєктував у формах архітектури «свойської». Прочитав низку доповідей, зокрема: «Сучасний стиль в архітектурі» (або «Проблема сучасного стилю в польській архітектурі») на засіданні Політехнічного товариства 14 березня 1922 року і «Старохристиянські церкви Равенни» 7 січня 1925 там же, «Нові напрямки в закордонній архітектурі» на засіданні Кола польських архітекторів 3 березня 1927 року. У різноманітних архітектурних конкурсах здобув 20 відзнак. Член журі на конкурсі проєктів готелю «Брістоль» у Кракові (1912).

Помер 17 березня 1929 у Львові. Похований на 13 полі Личаківського цвинтаря. Дітей не мав. Був одружений з Ядвігою Плавицькою.

Роботи
 Костел у Мишковичах у стилі історизму зокрема з елементами неоготики. Збудований у 1904—1906 роках, зруйнований у 1980-х.
 Корпуси психіатричної лікарні у Львові (1904—1909, у співавторстві).
 Комплекс із близько 60 корпусів лікувального закладу для душевно хворих у селі Кобежин під Краковом (нині дільниця Кракова), споруджених у 1908—1914 роках. Співавтори Антоній Будковський і Тадеуш Зелінський. В основу розпланування покладено урбаністичну ідею міст-садів. Серед збудованих споруд зокрема: головний корпус, помешкання для персоналу, дім зібрань, електростанція, споруди фільварку, пральні і пекарні, костел, брама і дім вартового.
 Кілька типових проєктів сільських хат різної вартості, створених для виданої 1915 року збірки «Odbudowa polskiej wsi» (Відбудова польського села). Це зокрема проєкти двох одно- і однієї двокімнатної хати з господарськими приміщеннями. Там же опубліковано вступну статтю Клімчака про спорудження печі.
 Низка типових проєктів, призначених для повоєнної відбудови містечок. Серед них зокрема пекарня, дім столяра, сільський шпиталь, лазня, дім ткача, дім купця, дім лікаря, притулок для старців. 1916 року разом із проєктами інших авторів увійшли до альбому «Odbudowa polskiego miasteczka».
 Санаторій у Криниці-Здруй (1924—1926). Опублікував статтю, присвячену спорудженню санаторію.
 Пам'ятник Пулаському в Криниці-Здруй. Проєкт від 1929 року був реалізований із суттєвими змінами через кілька місяців після смерті Клімчака. Зміни впроваджено ймовірно Станіславом Вуйціком.
 Комплекс психіатричного шпиталю в Холмі. За задумом мав складатись із 37 споруд і вміщувати 800—1000 ліжок. 1929 року Клімчак спроєктував перших 6 корпусів. Того ж року через хворобу, незадовго до своєї смерті був змушений відмовитись від подальшого проєктування і нагляду за будівництвом. Замість нього призначено архітектора Ігнатія Кендзерського. Через припинення фінансування комплекс не було реалізовано до кінця. З урахуванням цього низку споруд перепроєктовано. Посвячення відбулось 1932 року.
 Колонія приватних будинків у дворковому стилі для державних службовців у Львові під назвою «Власна стріха». Нині вулиця Панаса Мирного. Споруджено у 1928—1932 роках спільно з Максиміліаном Кочуром та М. Кольбушевським.
 Готель «Під ружею» у Криниці-Здруй.
 Власна вілла у Криниці-Здруй.
 Водонапірна вежа з рестораном у Цехоцінку.
 Невелика крамниця у формі ротонди у Криниці-Здруй.
 Перебудова монастиря Марії Магдалини у Львові для потреб Політехніки.
 Шпиталь у Ченстохові.
 Помилково Клімчакові приписуються костели в Теребовлі і Жовкві. Остання атрибуція згадується низкою джерел і виникла скоріш за все після публікації в часописі Architekt 1904, № 5 обмірів жовківської фари, виконаних спільно з Мар'яном Гейцманом. Під теребовлянським можливо розумівся костел у Семенові поблизу Теребовлі. Храм у неготичному стилі, за формами близький до типового костелу Тадеуша Обмінського на 400 осіб і одночасно на костел у Підгайчиках Юстинових Теодора Тальовського. Будувався від приблизно 1906 до 1907 року. Тепер православна церква.

Нереалізовані проєкти
 Конкурсний проєкт Львівської торгово-промислової палати на проспекті Шевченка, 17 (1907, друга нагорода, співавтор Адольф Каменобродський).
 Проєкт передпоховальної каплиці у Криниці-Здруй (1909).
 Конкурсний проєкт казино у Львові у стилі раціонального модерну, на нинішньому проспекті Шевченка, 13 (1909—1910, друга нагорода, співавтор Мар'ян Гейцман).
 Проєкт корпусу Львівського університету на вулиці Грушевського. Створений для конкурсу 1912 року.
 Проєкти житлових будинків для архітектурної виставки 1912 року у Кракові. Проєкт вілли для однієї родини відзначений «першою почесною згадкою», проєкт будинку на чотири родини для робітничої колонії відзначено «другою почесною згадкою». Проєкт вілли експонувався на виставці.
 Проєкт перебудови дому Стрілецького товариства в Тарнові (1919).
 Проєкт гробівця у Золочеві (1919).
 Проєкт санаторію у Криниці-Здруй, на вулиці Нітрібітта. Призначений для конкурсу 1926 року. Співавтор Ервін Вечорек. Здобув одне з трьох перших місць. Не прийнятий до реалізації.
 Проєкт перебудови костелу у Криниці-Здруй (1928).
 Конкурсний проєкт шпиталю Червоного хреста у Лодзі.
 Проєкт дому доктора Юзви в Заліщиках.
 Конкурсний проєкт костелу святого Роха в Білостоку.
 Проєкт мосту у Криниці-здруй.
 Проєкт молокозаводу у Криниці-Здруй.

Примітки

Джерела

 Łoza S. Klimczak Władysław // Słownik architektów i budowniczych polaków oraz cudzoziemców w Polsce pracujących. — Warszawa : Wydawnictwo im. Mianowskiego, Instytutu popierania nauki, 1931. — S. 162.
 Łoza S. Klimczak Władysław // Architekci i budowniczowie w Polsce. — Warszawa : Budownictwo i Architektura, 1954. — S. 146.
 Najpiękniejszy szpital Krakowa dziełem lwowianina // Cracovia Leopolis. — 2011. — № 4 (68). — S. 38—39.
 Ś. p. Prof. Władysław Klimczak // Czasopismo Techniczne. — 1929. — № 10. — S. 145.
 Klimczak Władysław // Polska niepodległa: encyklopedia PWN. — Wydawnictwo Naukowe PWN, 2009. — S. 414. — ISBN 978-83-01-15712-8.
 Korajska S. Klimczak Władysław // Polski Słownik Biograficzny. — T. XII — Wrocław — Warszawa — Kraków : PAU, 1966—1967. — S. 620.
 Krzyżanowski W. Na przełomie. Z powodu działalności ś. p. arch. Władysława Klimczaka // Architekt. — 1930. — № 3—4. — S. 3—7.
 Program Politechniki Lwowskiej na rok akademicki 1929/1930. — Lwów : Nakładem Politechniki Lwowskiej, 1929. — S. 198.

Архітектори Львова
Архітектори модерну
Випускники Львівської політехніки
Члени Політехнічного товариства у Львові
Померли у Львові
Поховані на Личаківському цвинтарі
Архітектори XX століття

redpajama_set_name: RedPajamaWikipedia


text:
VISION COURSES MASTERTEAM CONTACT
This is a template provided for your convenience.
You are strongly advised to adapt the text to fit your particular case.
1. Operator and subject matter
2. Users, voluntary agreement
3. User content
4. Content of third parties
5. Prohibition of use, exclusion from use
6. Copyright law
8. Liability, liability exclusion, restriction and exemption
9. Terminating the account
10. Changes to terms of use
11. Statement on data protection and terms of use
1. The Munich University of Applied Sciences (HM) and the Strascheg Center for Entrepreneurship GmbH (SCE) work together on the Deep Dive Project to design, implement and run a project-based master's degree programme and an open online course on "Entrepreneurship and Digital Transformation". The subject matter of these terms of use is the joint operation of the Deep Dive School, an in-house developed virtual learning platform, which enables the provision of Open Online Courses (MOOCs). Students also have the ability to network and exchange with other participants on the platform (Community area) and to discuss various topics/course units (Discussion). The platform provider, LearnWorlds, was chosen to both set up the virtual online school and to administer a Massive Open Online Course. With successful completion of the learning module and the examinations that go with it, the respective participants will be issued a "Certificate of Knowledge" at the end of the course.
2. The MOOC is open to all interested persons. Participation is voluntary.
Users register for this on the Deep Dive School learning platform (platform provider: LearnWorlds) with mandatory information (user name, mail address, password). In their profile users can upload a profile picture and add to it with further information, such as professional experience or social media links (Facebook, LinkedIn, Instagram, etc.). This is all on a voluntary basis. By providing social links the respective user agrees that other course participants may contact them via these links and that they can network with one another.
With the registration the user is granted a simple, non-transferable right of use for this learning platform.
The users shall be obliged to act with respect at all times, and to handle the rights of other users and third parties diligently when engaging with other users. The user can be excluded if such obligations are violated. This learning platform is exclusively for the purposes of the Deep Dive School. Any other use of the platform, for other private and/or commercial purposes, for example, shall be prohibited.
3. The learning platform enables the user to perform tasks and share contributions with HM and SCE and other users. The respective user shall retain all intellectual property rights to the use content and shall be responsible for the use content that they release. To the extent that the user provides content, they shall grant HM and SCE a fully transferable, license-free, unlimited, sublicensable, non-exclusive and worldwide license to copy, distribute, change, publish, display/advertise and create derived works on its basis or any other use of the user content. HM and SCE shall have the right to remove or change user content for whatever reason, e.g. with suspicion that the content infringes on these terms of use.
4. Via the MOOC users can access the content of courses, other users and/or third parties and links to websites and services of third parties and/or use these. HM and SCE cannot guarantee that such content of third parties is free of material that other users could find offensive or otherwise inappropriate, and of malware or other harmful programmes, which could damage computers, mobile devices or data of users stored on these devices. HM and SCE accept neither responsibility nor liability in relation to the access of a user to or the use of such third party content.
5. MOOC users shall be obliged to observe all relevant copyright laws. Only content and statements that do not infringe on the rights of others (especially copyright and neighbouring rights) may be published in the MOOC.
MOOC users shall be responsible for their activities within the entire platform. The personal password for activating and using the user account must always be kept secret from third parties. Should users have reason to believe that third parties have knowledge of their password, they shall be obliged to change it immediately.
User activities that are aimed at impeding the functionality of the platform or making the portal non-functional are forbidden and can be prosecuted under civil and criminal law. Measures in particular that could impact on the physical and logical structure of the platform are also forbidden. Users may not use the MOOC for commercial purposes. Advertising, among other activities, by sending content which recipients have not requested (spamming), is also forbidden.
All users shall be obliged not to violate any legal regulations with their content and activities (applicable law of the Federal Republic of Germany). The platform may not be used for illegal purposes.
Also forbidden shall be the publication, communication or distribution of content/statements that are illegal, especially with offensive, violence-glorifying, discriminatory or pornographic content or with other such content that would transgress standards of public decency. This shall also include content that is reached via the links set by the users. The use of offensive content, ambiguous terms and other such representations shall also be prohibited, should their illegality is suspected, but cannot be conclusively determined. HM and SCE reserve the right to remove such content or references where such suspicion exists, without prior notice or explanation.
Should there be a violation of the terms of use, the user shall be temporarily or permanently excluded from all use. An entitlement to readmission is not a given. Among others, a requirement for readmission shall be a written application with an assurance that there will be no such abusive behaviour in the future.
6. All material placed on the learning platform is protected by copyright, if not otherwise explicitly stated. This means content that is intended for personal use as part of the performance of the MOOC may not be passed on to third parties without the creator's written consent and may be neither reproduced nor changed. This shall also apply to material that is created by the user alone or with others during the course. Regardless of the copyright protection all users shall agree that personally created material may be used for course purposes.
7. HM and SCE shall endeavour together with LearnWorlds to ensure the security of the platform's users. Despite their commitment to protect the security of user accounts and the information pertinent to them, neither HM and SCE nor LearnWorlds can guarantee that unauthorised third parties may be able to thwart the security measures taken. HM and SCE would therefore ask all users to immediately inform about each and every threat to security or unauthorised use of an account.
8. Each and every user recognises and agrees that every access to the MOOC or every use of the services or content shall be at their own risk and responsibility.
The MOOC has been put together with the greatest possible care on LearnWorld's platform. The operator does not accept any liability for the correctness, accuracy or error-free status of the information provided. Nor does the operator accept any liability for the content published by users. All liability for damages caused directly or indirectly by the use of the sites shall also be excluded.
Nor is the operator responsible for the content of websites referred to by links and they do not provide any guarantee or accept any liability for the appropriateness and legality of these sites.
The user shall indemnify the operator from all claims by third parties, made against HM and SCE as a result of a violation of the aforementioned duties and/or harmful activities of users. HM and SCE exclude any liability within the scope of the applicable laws and regulations.
9. Users can have their account deleted at any time without having to provide a reason. The user's data can no longer be retrieved after the account is deactivated.
10. HM and SCE reserve the right to revise the terms of use at any time and at their own discretion. Any revision of the terms shall become effective immediately after publication. With significant changes to the terms HM and SCE shall take appropriate steps to inform the users about such changes. In any event the further use of the services after publication of such changes, whether with or without prior notice, shall constitute a binding acceptance of the revised terms.
11. Each and every user agrees:
I am familiar with the data protection declaration and terms of use and I herewith accept them.
I am aware that required personal data is processed with use of the learning platform.
I agree to the processing of the data I have provided and the contributions published by me, as well as to the use of files I have provided within the scope of the Deep Dive School and the MOOC. I am aware that this consent can be revoked at any time. This is, however, only possible with the full deletion of the account.
Heßstraße 89, 80797 Munich, Germany
info@deepdive.school
Copyright © 2019 Deep Dive. All rights reserved - Created with LearnWorlds
{{/if}} {{#if course.status == 'paid'}} {{#if button.status == 'enroll'}} Enroll {{#if course.discountFlag}} {{=course.currency}}{{=course.price}} {{=course.currency}}{{=course.discountPrice}} {{#else}} {{=course.currency}}{{=course.price}} {{/if}} {{/if}} {{#if button.status == 'multiple'}} Enroll {{/if}} {{/if}} {{#if course.status == 'free'}} {{#if button.status == 'enroll'}} Register for free! {{/if}} {{/if}} {{#if button.status == 'subscribe'}} Subscribe {{/if}}


text:
Kay Miller
Upon graduation from Irving High School in 1959, Kay attended The University of Texas at Austin and earned a Bachelor's Degree in Music Education in 1965. While teaching in Amarillo (1966-70), Kay began work on a Master of Arts degree at West Texas State University which she completed in 1973.
In 1970, Kay and her family moved to Houston where she taught for the Spring Branch ISD at Spring Forest Jr. High. While at Spring Forest, Kay's orchestras were very successful and won many UIL Sweepstakes Awards. Alief ISD opened Albright Middle School in 1983, hiring Kay as their orchestra director. While teaching at Albright MS, Kay's orchestras received 15 consecutive UIL Sweepstakes Awards. Kay was chosen as the 1989 Albright MS Teacher of the Year. In 1990-91 TMEA selected Kay's Albright MS Orchestra, and her husband Griff's Hastings HS Orchestra as the Middle School and High School String Honor Orchestras. This was the first time TMEA had chosen a husband and wife team in the same school district for these honors. In 1991-92, the Albright MS Orchestra and Hastings High School Orchestra were invited to perform at the MID-WEST BAND/ORCHESTRA CLINIC in Chicago.
She has also been active in ASTA, TODA, TMEA and TMAA, having served as President of TODA, Orchestra Chairman for TMEA Region 9 and 17 and TMAA Vice-President, Orchestra Division. She was the Middle School Orchestra Guest Conductor for the University of Kansas Midwestern Music Camp for 13 years and is a frequent adjudicator and clinician thru out the Texas/Oklahoma areas. After 30 years of teaching, Kay retired in 1997, but one year later accepted a half-time position teaching beginning 5th and 6th graders at Klentzman Int. School. Alief opened Budewig Int. School in 2003, selecting Kay as their full time orchestra director.
Currently, Kay and her retired orchestra director husband, Griff, reside in Houston, Texas where Griff teaches skeet lessons. Their son Griff II (double bass), daughter-in-law, Rhonda (flute), and two grandchildren, Robert (viola), and Ruth (cello), also live in Houston.
Kay is extremely proud to have been chosen as the 2007 TODA ORCHESTRA DIRECTOR OF THE YEAR. She wishes to thank the members of the TODA Board and those who nominated her for this wonderful honor. Kay feels that her success has been due to those who helped her along the way, beginning with her parents Richard and Ruth Davis; her first band director Karl Hudgins; University of Texas Longhorn Band Director Emeritus Vincent R. DiNino; mentor and friend Robert E. Foster and wife Becky; Dr. Gary Garner, Bill Porter (ODY 1985), Betty Roller(ODY 1990), Kathy Fishburn (ODY 1999); Pat Jones (ODY 2001); former principal Dennis A. Paul, and her husband Griff. Kay also wishes to thank TMEA, TODA, ASTA and the music industry for providing the clinics and materials that helped her become successful. Most of all, Kay wants to thank all of the outstanding young musicians that she has had the privilege of teaching.


I didn't take the time to write.
that stole my time just like a crook.
which you should know takes all my might.
To know the form I'd need insight.
But did I study? I'm contrite!
I didn't even read the book.
I didn't take the time.
I hope you understand my plight.
but I won't bite the rondeau hook.


Markets InsiderAlibaba has been on fire this year, surging more than 90%.
While Alibaba is certainly feeling the love from many areas of the investment landscape, it's still the most shorted company in the world by a mile. Speculative bears are holding $US22 billion of Alibaba stock short, hoping to profit from a share decline, according to data compiled by financial analytics firm S3 Partners. That's well over double the position in Tesla, the second most-shorted company worldwide.
Alibaba's soaring stock price has resulted in massive losses for these sceptics. They have taken a $US9.8 billion bath in 2017, a loss that's more than twice the next-worst performing short. In fact, they lost $US2 billion last week as Alibaba climbed 10% on its blockbuster earnings report.


Emerald Pool & Patio has been providing Oregon with quality pools, spas, hot tubs, stoves, patio furniture, outdoor kitchens and barbecues, and much more since 1955.
Are you looking to warm up your winter or enjoy a casual outdoor living lifestyle while entertaining family and friends? Do you just want to get away from it all with a relaxing spa or hot tub? You'll find the right combination of outdoor living solutions you're looking for at Emerald Pool & Patio.
Whether fueled by wood, pellet or gas, our family of stoves offer viable alternative heat sources that are environmentally conscious and highly efficient.
Emerald Pool & Patio carries the complete line of Sundance Spas and Jacuzzi Hot Tubs in both our Eugene and Bend, Oregon stores.
Whether you're looking to entertain family and friends, or just get away from it all, Emerald Pool & Patio can help you create your perfect outdoor room.
We offer a terrific selection of barbecue – from high quality gas grills, to custom outdoor kitchens, to the very best pellet and charcoal smokers – and all the accessories.
Whether it is indoor or outdoor equipment we sell, or items you have purchased elsewhere, we can service it. We also do water testing and analysis for your swimming pool or spa/hot tub.
At Emerald Pool & Patio, we want you to have the backyard oasis you've always dreamed about, and that's why we design and construct custom inground pools – we're dedicated to bringing your outdoor vision to life for you to enjoy for years to come.
Just bought a Mendota, gas fireplace insert from them and it will be installed next week! Very helpful, friendly people and they gave me extra discounts, too! Very pleased.


Location : Calle Benito Juárez No 395 Sur esq. Canal Francisco Cañedo Col. Ejidal 80370 Navolato, Sinaloa.
Write first review for Casa Ley - Super LA PRIMAVERA !
Casa Ley - Super LA PRIMAVERA offer more than 0 brand name stores. Casa Ley - Super LA PRIMAVERA is located in Navolato, Sinaloa - Calle Benito Juárez No 395 Sur esq. Canal Francisco Cañedo Col. Ejidal 80370 Navolato, Sinaloa., Mexico. (GPS: 24.765945, -107.697906).
Look at the list of stores in Casa Ley - Super LA PRIMAVERA , hours, location and information about mall and special events, sales, coupons. You can choose store from list below and get detail information - other stores locations for the brand, location, shopping hours, phone, map, directions contact. Casa Ley - Super LA PRIMAVERA is one of the best shopping place for spend your free time - mall/shopping center has all types of stores - outlets, department, fashion, traditional and more.
Have you ever visited Casa Ley - Super LA PRIMAVERA ? Do not forget to write shopping review and rate your satisfaction.
Already visited Casa Ley - Super LA PRIMAVERA ? Write a review!
Casa Ley - Super LA PRIMAVERA - Navolato Area, Sinaloa 80370. Click on the button and get directions to Casa Ley - Super LA PRIMAVERA . Mall/Shopping center is also displayed on the map with gps for your navigation.
Give us your experience with Casa Ley - Super LA PRIMAVERA by writing a short review.


text:
Q: Algorithm for combination I have designed an algorithm in java I generate all combinations of elements of a list . For example whereas the elements [A, B , C] it generates combinations , [A] , [B] , [C] , [AB] , [BC] , [ABC] . Or based on the elements [A, A, B] generates combinations [A] , [B] , [AA] , [AB] , [AAB] .
This is my code to generate combinations .
private List<Elemento> combinazioneMassima = new ArrayList<>();
    private Log logger = LogFactory.getLog(Combinazioni3.class);

    public Combinazioni3(List<Elemento> generaCombinazioneMassima) {
        this.combinazioneMassima = generaCombinazioneMassima;
    }

    public void combine() {
        this.findAllCombinations(combinazioneMassima);
    }

    private static class Node{
        int lastIndex = 0;
    List<Elemento> currentList;
    public Node(int lastIndex, List<Elemento> list) {
            this.lastIndex = lastIndex;
            this.currentList = list;
    }
    public Node(Node n) {
            this.lastIndex = n.lastIndex;
            this.currentList = new ArrayList<Elemento>(n.currentList);
    }
    }

    public void findAllCombinations(List<Elemento> combinazioni) {
        Date dataInizio = new Date();
        List<List<Elemento>> resultList = new ArrayList<List<Elemento>>();
        LinkedList<Node> queue = new LinkedList<Node>();
        int n = combinazioni.size();
        ArrayList<Elemento> temp = new ArrayList<Elemento>();
        temp.add(combinazioni.get(0));
        queue.add(new Node(0, temp));
        // add all different integers to the queue once.
        for(int i=1;i<n;++i) {
                if(combinazioni.get(i-1) == combinazioni.get(i)) continue;
                temp = new ArrayList<Elemento>();
                temp.add(combinazioni.get(i));
                queue.add(new Node(i, temp));
        }
        // do bfs until we have no elements
        while(!queue.isEmpty()) {
                Node node = queue.remove();
                if(node.lastIndex+1 < n) {
                        Node newNode = new Node(node);
                        newNode.lastIndex = node.lastIndex+1;
                        newNode.currentList.add(combinazioni.get(node.lastIndex+1));
                        queue.add(newNode);
                }
                for(int i=node.lastIndex+2;i<n;++i) {
                        if(combinazioni.get(i-1) == combinazioni.get(i)) continue;
                        // create a copy and add extra integer
                        Node newNode = new Node(node);
                        newNode.lastIndex = i;
                        newNode.currentList.add(combinazioni.get(i));
                        queue.add(newNode);
                }
                GestoreRegole gestoreRegole = new GestoreRegole();
                gestoreRegole.esegui(node.currentList);
        }

    }

But however for input > 250 the program stops and takes too long to make all combinations .
How can I improve this solution ? Or is there a better solution ?

A: For input=250, there will be so much combinations:
Look at this example:
(1) {a}     => {a}
(3) {a,b}   => {a}, {b}, {a,b}
(7) {a,b,c} => {a}, {b}, {c}, {a,b}, {a,c}, {b,c}, {a,b,c}

as you can see, there will be 2^n-1 elements
So for input=250 - 2^250-1 = large number (1.8*10^75)
Too much memory is used. I think number about 20 (1048575) will make trouble too

A: This is the basic idea that I was telling you. I am inserting only the few key points. You should attach this to your code as you know best.
  public void findnThCombination(List<Elemento> combinazioni, int n) {
    ...
    int counter_combinations = 0;
    // add all different integers to the queue once.
    for(int i=1;i<n;++i) {
            if(combinazioni.get(i-1) == combinazioni.get(i)) continue;
            temp = new ArrayList<Elemento>();
            temp.add(combinazioni.get(i));
            queue.add(new Node(i, temp));
    }
    counter_combinations ++;
    // do bfs until we have no elements
    while(!queue.isEmpty()) {
         //when you add a new combination
         counter_combinations++;
         if(counter_combinations == n) //return this combination
    }}

I hope this helps.

redpajama_set_name: RedPajamaStackExchange


text:
Ramadan Info
Eid Ul-Adha
Marriage – Nikkah
Madrasa
Local Prayer Times
Masjid Info & Doc
Learn Qur'an With Mahnoor
Mahnoor is a young Moose Jaw kid. Covid-19 hasn't stopped her to learn Quran. For other videos, you can subscribe to her YouTube link here.
COVID-19 Masjid Guidelines
MASJID COVID-19 GUIDELINES
TAKE WUDHU AT HOME BEFORE COMING TO THE MASJID
PLEASE BRING YOUR OWN PRAYER MAT
EVERYONE MUST WEAR A MASK IN THE MASJID ALL THE TIME
MASJID WASHROOMS WILL BE CLOSED DURING JUMAH PRAYERS
BRING A PLASTIC BAG TO KEEP THE SHOES AND EXIT EMERGENCY DOOR AFTER JUMAH PRAYER
SOCIAL DISTANCE MUST BE MAINTAINED (6 FEET APART)
CHILDREN UNDER 15 YRS OLD ARE NOT ALLOWED TO GO TO THE MASJID
Guidelines from Goverment of Saskatchewan
Delivering services virtually or through remote delivery such as drive-in service is recommended.
The total number of people participating in the services cannot exceed 30 per cent of seating capacity or 150 people, whichever is less.
To safely support larger groupings of individuals – and where seating area allows adequate physical distancing – multiple groups of 30 are permitted. These groups must be separated by two metres, unless they are part of the same family. Other groups of 30 must be arranged in the same way, and spaced from other groups by a minimum of five metres.
These guidelines apply to all worship services, including celebrations of life, weddings and outdoor ceremonies.
Where possible, registration of participants is encouraged to effectively manage the number of individuals attending. Registration should be facilitated to discourage attendees from common-use items such as pens and pencils.
Use visual cues to support physical distancing.
Implement one-way traffic flow to promote physical distancing (i.e. enter through one door and exit through another).
Attendees who are medically vulnerable are strongly encouraged to delay their return to services and continue to participate in services online, where possible.
Attendees, employees and volunteers are required to stay home if sick or symptomatic.
Places of worship will be required to identify measures by which entry and exit is managed to ensure physical distancing is maintained.
Promote physical distancing by marking the directional flow of people through buildings and areas. Mark seating areas and post visual reminders to observe physical distancing.
Individuals from the same household may be seated together and should remain in place once they are seated.
Seating (or designated worship space) must be arranged so that physical distancing can be observed at all times. Consideration must be given to how people enter and exit pews and other seating areas. A minimum of two metres must be maintained between household groups.
If multiple gatherings are held on a single day, the start and end times must allow those who attend one gathering to exit safely, avoiding contact with those arriving for the next gathering. Time is needed to clean and disinfect common surfaces between services.
Dismissal of gatherings should be done in a way that supports physical distancing.
All ancillary events, such as social events, should be postponed for the immediate future.
Where possible, consider managing parking lot assignments to ensure physical distancing is maintained.
NO PARKING IN THE PARKING LOT FOR DURING EID AND JUMMAH
Madras for Children
The regular Madrasa for children will start Saturday, Sept 20th. Children can come to the Masjid but must wear a mask and social distance must be maintained. Teachers will direct students where to seat. Children upon entering the Masjid must use a sanitizer, and one of the teachers will be checking their temperature if any of the students has a fever temperature will be sent back home.
Madras time: 11:30 am – 1:30 pm (Including taking wudhu and breaks)
Dhuhur Prayer time is at 1:30 pm
Election Announcement 2020
Donation, News
Election Announcement 2020 Download
IAS MJ Nomination Form Download
The Election Committee is announcing that the positions below are available for nomination and election on November 5th, 2020;
Secretary (2 Years Term)
Treasurer (2 Years Term)
Director (2 Years Term)
The nominee must have of Members in good standing who are;
A resident of Moose Jaw.
Canadian Citizens or Permanent Residents of Canada.
With no Criminal Record, with no current & past withstanding bankruptcy.
Not a voting member of any other Islamic Association in Saskatchewan.
Who are willing to run for these vacant positions are welcome to fill the nomination form submitted by the election committee by a scanned copy to electioncommittee@iasmoosejaw.com or in-person on November 1st & 2nd, 2020 directly after Maghrib Prayer in the Mosque to Mr. Abdella, with scanned/photocopy of Valid Saskatchewan driver's licence or Photo ID. The deadline for application is on November 2nd, 2020, at 11:59 pm.
We will announce the person's names who submitted a nomination for board election on November 3rd, 2020.
Please note after that deadline of submission of nomination passed, no application will be accepted. Also, an incomplete nomination form will be declined.
The election will be held on November 5th, 2020, from 06:00 to 08:00 PM in the Islamic Association of Saskatchewan (IAOS), Moose Jaw, 73 Lancaster Road, Moose Jaw – Saskatchewan.
Election result will be announced on November 7th, 2020 in AGM.
If you have any questions or require any help, please feel free to contact Mr. Abdella at 306-690-1588 or Mr. Muhammad at 306-713-8468.
Note: Nomination form will be available on website https://iasmoosejaw.com/ or contact us we will email to you.
Madras for Everyone
Abdul Ally
All Brothers and Sisters are welcome to weekly Madras at the Masjid.
Day: Mondays – Thursdays
Time: After Isha prayer
Topic: Quran Tafsir.
Current topic: Surat Al-Baqara
Every Sunday after Maghrib Prayer will be a lecture and discussion on various Islamic topics. (Please email Imam for the topics that you think will be beneficial for the Muslim community).
Sunday, December 15th, 2019:
Discussion on four books; the four mentioned by name in the Quran are the Tawrat (Torah or the Law) revealed to Musa (Moses), the Zabur (Psalms) revealed to Dawud (David), the Injil (the Gospel) revealed to Isa (Jesus), and the Quran revealed to Muhammad.
Masjid Abu Bakr Al-Sadiq
IAOS-Moose Jaw © 2016 All Rights Reserved


Belfast woman Elizabeth Sillery was today (Tuesday) named Older Volunteer of the Year 2017 at Belfast City Hall, for her voluntary management of the Agapé Centre in south Belfast.
The achievements and contributions of 44 older volunteers from day centres, arts organisations, churches and charities across the city were celebrated over lunch today at Belfast City Council's Age-Friendly Belfast Older Volunteer Awards.
Older Volunteer of the Year Elizabeth Sillery has volunteered at the Agapé Centre for several decades and has been instrumental in managing the Lisburn Road centre on a completely voluntary basis since it opened five years ago.
Jo-Anne Crossley, who made the nomination said: "Elizabeth knows every aspect of the Agapé Centre from how the boiler works, to where to find a cable for our video projector! She maintains meticulous records and also recruits other volunteers to help out when the centre is particularly busy.
Belfast Lord Mayor, Councillor Nuala McAllister who hosted today's event said: "It's been an absolute pleasure and privilege to meet these wonderful volunteers today – along with the people who nominated them to show how much they value their contribution to their organisations.
•	Marie Mathews Participation: Albert McIntyre was nominated by Mount Merrion Parish Church for his dedication and support for the community space. Albert has volunteered with the church for the last 40 years, making preparations for the Toddler group, the evening dance class, which he attends himself and a weekly community drop-in.
•	Take 5 Active Ageing: Joan Nicholson was nominated by Mark Turner for her work to make Grove Community Garden part of the local community. In her role as Chairperson, Joan organises activities, the induction and befriending of new members including clients with learning disabilities and acts as the link between the community gardeners and the council who own the site.
•	Arts and Culture: Nora Greer was nominated by Fighting Words Belfast, based at the Skainos Centre in east Belfast, for her mentoring work to unleash the creative writing talents of children and young people, including those who have additional educational needs.
•	Team or group: Family Support volunteers Anne Mulholland, Roseanne Monroe, Mary Campbell, Maureen Kirk, Jenny Baxter and Norah McGrath were nominated by TinyLife for their practical, social and emotional support to families of premature and sick babies and helping to raise the profile of TinyLife within the community.
Susan Neilly was also recognised with a special award for her tireless volunteering in her role as Chair of the Greater Shankill Senior Citizens' Forum. Susan sadly passed away after the nomination period, so her award was accepted by her daughter Sarah.


Frontop is a full-service real estate digital presentation company, with creative and technological display methods to help you win the market.
Is there any useful marketing method which can be beneficial abroad? How helpful is the ipad with special apps? It can highlight the architectural landscape.
I think these applications are already available on the market and I have seen some real estate company sites having 3D modeling feature that shows the imaginary structure of a building.
Is there any valuable advertising scheme which can be of assistance abroad? How useful is the ipad with singular apps? It can highpoint the architectural background.
Marketing is a way for promoting to your business and it is very useful today for businesses because of competitive environment.There are many ways where you can market your real estate business.
helps to find out the best apartment for us.
Marketing tool is promote you business offline and online. marketing is very useful for real estate projects. many projects are doing marketing for growing their business.
<!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:TrackMoves/> <w:TrackFormatting/> <w:PunctuationKerning/> <w:ValidateAgainstSchemas/> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w oNotPromoteQF/> <w:LidThemeOther>EN-US</w:LidThemeOther> <w:LidThemeAsian>X-NONE</w:LidThemeAsian> <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript> <w:Compatibility> <w:BreakWrappedTables/> <w:SnapToGridInCell/> <w:WrapTextWithPunct/> <w:UseAsianBreakRules/> <w ontGrowAutofit/> <w:SplitPgBreakAndParaMark/> <w ontVertAlignCellWithSp/> <w ontBreakConstrainedForcedTables/> <w ontVertAlignInTxbx/> <w:Word11KerningPairs/> <w:CachedColBalance/> </w:Compatibility> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> <m:mathPr> <m:mathFont m:val="Cambria Math"/> <m:brkBin m:val="before"/> <m:brkBinSub m:val="--"/> <m:smallFrac m:val="off"/> <m:dispDef/> <m:lMargin m:val="0"/> <m:rMargin m:val="0"/> <m:defJc m:val="centerGroup"/> <m:wrapIndent m:val="1440"/> <m:intLim m:val="subSup"/> <m:naryLim m:val="undOvr"/> </m:mathPr></w:WordDocument> </xml><![endif]--> Marketing tools is very important for real estate projects. It will helps online and offline to promote their project.
I visit your Link and very helpful link for real estate marketing.
Real Estate internet marketing is much more than just having a web presence, the best way to grasp the attention of prospective home buyers is through the internet. Reach More Prospects through Social networking and other online realtor marketing tools allow you to easily make known your services and listings on a local, national and international level.
Another useful tip to increase your real estate internet marketing success is to get more traffic to your website via search engine optimization.
Real estate takes a different approach in marketing as compared to other niches. Can an iPad with regular applications be used for the process?
Have you ever purchased a computer, phone or some other gadget only to find that 4 months later your new toy is already out of date, has depreciated in value and has quickly fallen behind the technology curve? Don't feel bad, this happens to just about everyone, present company included, and not only in the purchase of new gadgets and toys.


We shortly review the uncoupling-coupling method, a Markov chain Monte Carlo based approach to compute statistical properties of systems like medium-sized biomolecules. This technique has recently been proposed for the efficient computation of biomolecular conformations. One crucial step of UC is the decomposition of reversible nearly uncoupled Markov chains into rapidly mixing subchains. We show how the underlying scheme of uncoupling-coupling can also be applied to stochastic differential equations where it can be translated into a domain decomposition technique for partial differential equations.
Supported by the DFG research center "Mathematics for key technologies" (FZT 86) in Berlin.


Nigeria's audit process has not been particularly efficient over the years, especially as government ministries, departments and agencies (MDAs) have usually been found wanting in various aspects year in, year out, TOPNAIJA.NG reports.
Findings from the auditor-general of the federation's annual report have usually shown how some of these MDAs even fail to submit their audit reports. There have also been cases of excess and unauthorised payments to several agencies as well as leakages in government revenues and expenditure — all these the federal audit service commission bill seeks to address.
Passed by the senate in March 2018, after it was first passed by the house of representative, the audit bill aims to give legal backing to the office of the auditor-general and provide it with additional powers and functions required for its needed independence.
The bill will also establish the Federal Audit Service Commission and create office for two deputy auditors-general who shall be of same rank in public service as a permanent secretary the commission.
In addition, it mandates the MDAs to submit their financial reports not later than 90 days into the next financial year while the federal government should submit its not later than June 30 of the following financial year — a fine of N500,000 awaits defaulters.
Auditing, except otherwise provided by the constitution, of donations, grants and loans accruable to the federal ministries, departments and agencies or other public entities.
Auditing of international institutions to the extent of Nigeria's contribution to such bodies.
Auditing of all federal government and its agencies subsidies and their application.
Auditing of all federal government and its agencies' counterpart funded projects.
Auditing of all Nigerian embassies, consulates and foreign mission.
The bill sent to the president last year is yet to be considered. Section 58 subsections 4 of the 1999 constitution, as amended, gives the president 30 days to respond to bills transmitted from the national assembly.
"Where a bill is presented to the President for assent, he shall within 30 days thereof, signify that he assents or that he withholds assent," the section reads.
But nothing has been heard about the bill. Attempts to get the reaction of Ita Enang, senior special assistant to the president on national assembly (senate), did not yield the desired result as he neither answered calls nor responded to a text message sent.
John Odita, an activist, had described the silence from the presidency as an indication that it is not serious in its anti-corruption war.
Senate President Bukola Saraki had described the passage of the bill as a breakthrough in Nigeria's fight against corruption and said the commission will promote accountability in the public service.
Winifred Oyo-Ita, head of service of the federation, had also expressed optimism on the bill.
"The audit bill will be very good once this act comes… right now the auditor-general's office is just operating and being treated as another MDA or part of the government structure. They are not having enough teeth to carry out their functions effectively," she had said.
But as things stand now, no one is certain about when the president would act on the bill.


Charlotte Jean Pritt, the first woman to seek to become governor of West Virginia as the candidate of a major political party, was born January 2, 1949, at Charleston's St. Francis Hospital. She was raised at Buzzard Rock, near Sissonville on the outskirts of the capital city. She graduated from Sissonville High School and received a B.A. and M.A. from Marshall University. She was a teacher in her early years.
In the 1980s, the Kanawha County Democrat was elected to the West Virginia House of Delegates, serving from 1985 to 1988. In 1988, she campaigned for state Senate and won. She remained in the Senate from 1989 to 1992.
Pritt left the Senate in 1992, saying she had been drafted to run for governor. She was defeated in the Democratic primary after a bitterly fought battle with Gaston Caperton, the incumbent governor. She went on to oppose Caperton as an independent candidate in the general election in November. Scars of that campaign were to follow her four years later, when she again sought the governor's seat. This time she overwhelmed her primary opposition and faced Republican Cecil Underwood in the November 1996 general election.
She lost to Underwood by a vote of 324,518 to 287,870. She suffered from a divided party. Some Democrats, still remembering her independent race against the party incumbent in 1992, bolted to Underwood, who also benefited by the support of the coal industry and others alarmed by Pritt's liberal, pro-labor politics.
In 2000, Pritt ran for secretary of state, losing by a substantial margin in the Democratic primary to Joe Manchin, whom she had defeated in the 1996 gubernatorial primary. Pritt resumed her academic pursuits after the 2000 campaign, teaching seminars and pursuing a degree in nutrition. She became the owner of an educational and wellness consulting firm.
In 2012, Pritt was elected chairwoman of the Mountain Party, the West Virginia affiliate of the national Green Party.
Michael, Kay "Charlotte Pritt." e-WV: The West Virginia Encyclopedia. 08 December 2015. Web. 26 April 2019.


text:
andrewemett
Dr. Salomon Melgen
Senator Indicted on Federal Corruption Charges
Originally published on April 2, 2015, at NationofChange.org
Federal prosecutors indicted Sen. Robert Menendez on corruption charges on Wednesday for allegedly accepting lavish gifts and contributions in exchange for political favors. According to the Justice Department's public integrity unit, Sen. Menendez used his position to advance the business interests of campaign contributor and Florida ophthalmologist, Dr. Salomon Melgen. Investigated for years by the FBI, the Senate Ethics Committee, the Department of Health and Human Services (HSS), and a federal grand jury, Sen. Menendez and Dr. Melgen have finally been charged for participating in a bribery scheme.
After receiving an anonymous tip, the FBI began investigating allegations that Dr. Melgen had purchased underage prostitutes for Menendez during one of his trips to the Dominican Republic. Although the prostitutes eventually recanted their stories, the FBI and HHS investigators raided Dr. Melgen's offices in January 2013. Less than a month later, Menendez became Chairman of the Senate Foreign Relations Committee.
In March 2013, a federal grand jury in Miami reportedly began investigating Menendez's questionable relationship with Dr. Melgen. After acknowledging that he had failed to disclose two free trips aboard Dr. Melgen's private plane in 2010, Menendez wrote the doctor a personal check for $58,500 to reimburse him for the rides. The Senate Ethics Committee launched an investigation into why Menendez did not disclose the flights earlier.
andrew emett, Assistant Attorney General Leslie Caldwell, dominican republic, Dr. Salomon Melgen, HHS Secretary Kathleen Sebelius, Marilyn Tavenner, medicare, nationofchange, Sen. Harry Reid, Sen. Robert Menendez
Senator Expected to Face Federal Corruption Charges
Originally published on March 7, 2015, at NationofChange.org
The Justice Department is preparing to file criminal corruption charges against former Chairman of the Senate Foreign Relations Committee Sen. Robert "Bob" Menendez of New Jersey. A federal grand jury began investigating the senator two years ago after the FBI and Department of Health and Human Services (HSS) delved into allegations of Menendez exchanging political favors for lavish gifts from campaign contributor and Florida ophthalmologist, Dr. Salomon Melgen. In exchange for vacation trips and political donations, Menendez has allegedly obstructed a program to improve port security and attempted to interfere with Medicare's reimbursement policies in order to advance Dr. Melgen's business prospects.
A month after Sen. Menendez assumed office on January 17, 2006, Dr. Melgen began negotiations to purchase ICSSI, a Dominican company contracted to provide cargo screening in the Dominican Republic. In 2002, ICSSI had acquired a contract to provide screening throughout the country, but the government suspended the deal claiming the contract was too expensive and the bidding was too uncompetitive. Intent on purchasing ICSSI, Dr. Melgen fought to reinstate the contract, which was reportedly worth $500 million over 20 years.
During this time, Menendez began pushing legislation to require screening all ship containers headed to the U.S. In 2006, the Department of Homeland Security donated an x-ray scanning device to the Dominican Republic. Inspectors working at the Dominican port at Multimodal Caucedo found 5,000lbs of cocaine in a cargo container of peaches during the first week of operating the device.
andrew emett, attorney general eric holder, dominican republic, Dr. Salomon Melgen, HHS Secretary Kathleen Sebelius, icssi, Kerri Talbot, lucentis, Marilyn Tavenner, Multimodal Caucedo, nationofchange, Sen. Harry Reid, Sen. Robert Menendez, tricia enright
Canadian police block journalists from covering indigenous pipeline protest
Third police officer sentenced to prison for framing black males
Bernie calls for Paradise Papers investigation before considering GOP tax bill
No Charges For Cops Who 'Accidentally' Fired 107 Bullets at an Innocent Mom and Daughter
Only Six Days After Starting Cannabis Oil, This Little Girl's Leukemia Went Into Remission
geronimo rodriguez on No Charges For Cops Who…
Dale O'Reilly (@dale… on LAPD Shoot 15-Year-Old in Back…
valentin10 on Dead Prosecutor Drafted Arrest…
internationalinforma… on Dead Prosecutor Drafted Arrest…
agent provocateur on Innocent Civilian Deaths Cause…
Co-writer


text:
Every one's a winner
Article relating to an exhibition, 1998
Published by: The Independent
Unpaginated.
Original broadsheet clipping/monchrome type on newsprint wth full colour illustrations/article written in relation to the Turner Prize nominations of 1998 and the exhibition that accompanies the prize.
Title: Every one's a winner
subtitle: for the first time in its history, the Turner Prize feels like a proper show. Even if they do still pretend that it's an art award.
Author: Tom Lubbock
Source: The Independent, 3 November 1998, The Tuesday Review/Visual Arts, pp.11
Article contains a number of photographic reproductions - with the following credits: Top: Atlantic by Sam Taylor Wood; then from left, Cogent Shuddering by Cathy de Monchaux, The Roaring Forties by Tacita Dean and Innervisions by Chris Ofili.
Article discusses some of the issues that the judges face when nominating artists for the prize and provides an overview of the exhibition - describing the work of each artist. From the article: "Chris Ofili's super-encrusted, entertainment-packed, open-house paintings hardly need introducing now. They were in Sensation; he had a show in Southampton early this year, and another at the Serpentine which has only just closed." "Cathy de Monchaux had a show at the Whitechapel last year and I didn't like it much then either. The main hit is the fusion of sharp metal work and (seemingly) live tissue, as in Cognant Shuddering, which looks like flayed rabbits…" "Sam Taylor-Wood had some work in Sensation; otherwise it's only been seen abroad. It's the most Young British Artist thing in the show." "Tacita Dean is the least famous candidate. She's not owned by Saatchi, and she hasn't had a solo show in in a top public gallery."
» Tacita Dean
Born, 1965 in Canterbury, UK
» Cathy de Monchaux
» Chris Ofili
Born, 1968 in Manchester, UK
» Sam Taylor-Wood
Born, 1967 in London, England
» Turner Prize 1998
Group show at Tate Britain. 1998 - 1999
» Tate Britain


I have just finished my first reading of Ram Charan's new book What the Customer Wants You to Know: How Everybody Needs To Think Differently About Sales, and I have to admit to being wildly surprised. Mr. Charan is a brilliant business thinker; I would put him in the same class with Peter Drucker for his contribution to business and management thought (and that is a very small class). But a book on sales?
It is rare to chance upon a book directed towards sales organizations that contributes as much as does Mr. Charan's (this is especially true of someone who is not engaged in the study of sales on full time basis). But because of the direction in which the profession of sales is moving (requiring real business acumen) and because of Mr. Charan's intimate consulting engagements with some of the largest companies in the world, it should come as no surprise that he is able to sketch out the plan for sales organizations who will succeed now and in the future.
The heart of the new approach to selling is an intense focus on the prosperity of your customers. This is a radical departure from what most salespeople and selling organizations do. The entire psychological orientation is shifted 180 degrees. No longer do you measure your own success first. Instead you measure how well your customers are doing with your help.
I have long argued that to be a great salesperson in today's intensely competitive marketplace, you must first be a great business person. This starts with business acumen, which is a real necessity for the salesperson who will create value for their customer using Charan's guidelines. To create a real differentiating and defining value, a salesperson will need to understand how to describe the physical benefits of the product or service (which is commonly taught and practiced), as well as delivering some combination of improving the customer's margins, improving their cash flow, helping them grow revenue, ensuring ROI, improving their brand equity, and increasing their market share.
While all of this can be daunting to a salesperson (and equally daunting for the VP of sales), the book includes an outline and a framework that guides you through what Charan calls a Value Account Plan. His outline serves as an excellent template, and includes a detailed approach to collecting the necessary customer data (and this approach requires a good bit more data, especially financial data, than most salespeople have collected in the past), writing the the value proposition (including your products, services and the required investment), and documenting the business benefits to the customer described above.
These benefits Charan calls the Total Value of Ownership, as opposed to the Total Cost of Ownership. And rightfully so; the role of any sales organization is to create value, and then to capture some portion of that value for their company. The ability to improve your customer's cash flow, or improve their revenue, or increase their market share should naturally result in the ability to share in some of the value created in the form of higher sales margins.
I don't believe that sales organizations can act fast enough in adopting this type of approach. I am systems agnostic, believing that most sales processes and systems offer something of value for most salespeople. As far as I know, Mr. Charan does not head an organization that offers this type of sales process to organizations (although some must surely spring up), and that fact coupled with his experience consulting for many of the leading companies in the world, add even more weight to his approach. This is one of only two books (book 1, book 2)on sales that I believe must be read and implemented immediately.
See my attached slide presentation below.