text:
import matplotlib.cm
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import scipy.optimize as op
from adjustText import adjust_text
from scipy.stats.kde import gaussian_kde

import chainplot.core.style as plot_style
from chainplot.utils.dict_tools import replace_dict, split_kwargs, britishdict, combine_dict
from chainplot.utils.string_tools import prettify

# Define some helper functions (should probably go into class as static methods tbh or in separate module)
def categorical_lookup(series):
    s = series.copy()
    unique_vals = sorted(np.unique(s))
    return dict(zip(unique_vals, np.arange(1, len(unique_vals) + 1)))

def facet_dimensions(number_of_plots):
    sqrt_nplots = np.sqrt(number_of_plots)
    side_length = int(sqrt_nplots)
    nrows, ncols = (side_length, side_length)

    if number_of_plots < 4:
        nrows = 1
        ncols = number_of_plots
    elif sqrt_nplots > (side_length + 0.5):
        nrows += 1
        ncols += 1
    elif sqrt_nplots > side_length:
        ncols += 1

    return nrows, ncols

class Plot:
    def __init__(self, data, mapping=None, labels=None, style=plot_style.themes['default'], **kwargs):
        self.data = data.copy()
        self.plot_data = self.data.copy()

        self.mapping = mapping
        self.fig = plt.figure(**kwargs)
        self.number_of_plots = None
        self.axes = None

        # Set plot defaults
        self.mapping = {
            'x': 'x',
            'y': 'y',
            'by': None,
            'shadow': False  # this isn't really a mapping; it should go somewhere else!
        }

        if labels is None:
            self.labels = {
                'title': None,
                'subtitle': None,
                'xlab': None,
                'ylab': None
            }
        else:
            self.labels = labels.copy()

        # Set style
        if type(style) == str:
            style = plot_style.themes[style.lower()]

        self.style = combine_dict(
            plot_style.THEME_SNOW,
            style.copy()
        )

        self.fig.set_facecolor(self.style['fig']['background']['color'])

        # store model fitting parameters
        self.fitted_parameters = []

    def subset_data(self, subset_function):
        self.plot_data = self.data.loc[subset_function]
        return self

    def alter_data(self, data):
        self.plot_data = data
        return self

    def alter_style(self, newstyle):
        self.style = combine_dict(self.style, newstyle)
        return self.apply_style()

    def apply_style(self, style=None):
        if style is None:
            style = self.style

        labels = replace_dict(self.labels, val=None, replacement=' ')

        if self.axes is not None:
            if len(self.axes) > 1 and self.labels['subtitle'] is None:
                # subtitle = sorted(self.plot_data[self.mapping['by']].unique())
                subtitle = sorted([s for s in self.pull_data('by', self.data).unique()])
                subtitle = [prettify(sub) for sub in subtitle]
            else:
                subtitle = prettify(labels['subtitle'])

            for i, ax in enumerate(self.axes):
                ax.spines['bottom'].set_color(style['axes']['spines']['color'])
                ax.spines['left'].set_color(style['axes']['spines']['color'])
                ax.tick_params(colors=style['axes']['spines']['color'])

                # Remove top and bottom spines
                ax.spines["top"].set_visible(False)
                ax.spines["right"].set_visible(False)
                # Remove extra ticks
                ax.get_xaxis().tick_bottom()
                ax.get_yaxis().tick_left()
                # Set tick label size
                for label in (ax.get_xticklabels() + ax.get_yticklabels()):
                    label.set_fontsize(style['axes']['label']['size'])
                    label.set_fontsize(style['axes']['label']['size'])

                # Set background colour
                ax.set_axis_bgcolor(style['axes']['background']['color'])

                # Need to check row and column
                nrows, ncols = facet_dimensions(self.number_of_plots)

                if (i % ncols) == 0:
                    ax.set_ylabel(labels['ylab'], **style['axes']['title'])
                if (i // ncols) == (nrows - 1):
                    ax.set_xlabel(labels['xlab'], **style['axes']['title'])

                ax.set_title(subtitle[i], **style['subtitle'])

        self.fig.set_facecolor(self.style['fig']['background']['color'])

        return self

    def discrete_axis(self, categorical, lookup):
        self.labels[categorical + 'lab'] = ''

        for ax in self.axes:
            # (I can definitely make all this much more dynamic by leveraging `categorical` variable)
            if categorical == 'x':
                ax.set_xticks(list(lookup.values()))
                ax.set_xticklabels(list(lookup.keys()))

            elif categorical == 'y':
                ax.set_yticks(list(lookup.values()))
                ax.set_yticklabels(list(lookup.keys()))

            # Remove extra ticks
            if categorical == 'x':

                ax.spines["bottom"].set_visible(False)

                ax.get_yaxis().tick_left()
                # could put this in style dict
                ax.tick_params(
                    axis='x',  # changes apply to the x-axis (could do outside of loop?)
                    which='both',  # both major and minor ticks are affected
                    bottom='on',  # ticks along the bottom edge are on
                    top='off'  # ticks along the top edge are off
                )

                # could put this in style dict
                ax.xaxis.grid(True, which='major', color='dimgray', linestyle='dotted')
                ax.set_xlim(
                    [min(list(lookup.values())) - 1,
                     max(list(lookup.values())) + 1]
                )

            elif categorical == 'y':

                ax.spines["left"].set_visible(False)

                ax.get_xaxis().tick_bottom()
                ax.tick_params(
                    axis='y',  # changes apply to the y-axis
                    which='both',  # both major and minor ticks are affected
                    left='on',  # ticks along the left edge are on
                    right='off'  # ticks along the right edge are off
                )

                ax.yaxis.grid(True, which='major', color='dimgray', linestyle='dotted')
                ax.set_ylim(
                    (min(list(lookup.values())) - 1,
                     max(list(lookup.values())) + 1)
                )

        return self

    def map(self, **kwargs):
        # `alter_mapping`?
        # Split generating axes and setting the mapping into different methods
        # create new class for managing mappings?

        # update mapping with existing
        kwargs = combine_dict(self.mapping, kwargs)

        by = kwargs['by']
        shadow = kwargs['shadow']

        if by is None:
            self.number_of_plots = 1

            # Create dummy variable for faceting (there must be a netter way than this, right?)
            by = 'by'
            kwargs['by'] = 'by'
            self.plot_data['by'] = 1
        else:
            self.number_of_plots = len(self.plot_data[by].unique())

        nrows, ncols = facet_dimensions(self.number_of_plots)

        # check if there are pre-existing axes
        if self.axes is None:
            axes = [plt.subplot(nrows, ncols, i) for i in range(1, self.number_of_plots + 1)]
            self.axes = axes

        self.mapping['by'] = by
        self.mapping['shadow'] = shadow

        for k, v in kwargs.items():
            self.mapping[k] = v

        # Set default labels
        for lab in ('x', 'y'):
            if self.labels[lab + 'lab'] is None:
                self.labels[lab + 'lab'] = prettify(self.mapping[lab])

        return self.apply_style()

    def pull_data(self, attr, plot_data):
        data = plot_data.copy()
        if attr in self.mapping.keys():
            mapped_attr = self.mapping[attr]

            if type(mapped_attr) == str:
                attr_data = data[mapped_attr]

            elif callable(mapped_attr):
                attr_data = mapped_attr(data)

            elif type(mapped_attr) in (int, float):
                attr_data = mapped_attr * np.ones(data.shape[0])

            else:
                ValueError('Variables must be mapped to data with either string references or functions')
        else:
            attr_data = None  # pd.Series([None])

        return attr_data

    def filter_plot_data(self, plot_data, mapkey, value):
        if value is None:
            return plot_data
        else:
            return plot_data.loc[plot_data[self.mapping[mapkey]] == value]

    # Layering methods

    def layer_points(self, categorical=None, lookup=None, **kwargs):
        categories = self.get_facet_variables()

        # argument handling (should really be moved to a method or class or something)
        kwargs, shadow_kwargs = split_kwargs(kwargs, 'shadow_')

        kwargs = britishdict(kwargs)
        kwargs = combine_dict(
            self.style['layers']['points'],
            kwargs
        )

        shadow_kwargs = britishdict(shadow_kwargs)
        shadow_kwargs = combine_dict(
            self.style['shadow_defaults']['points'],
            shadow_kwargs
        )

        for i, ax in enumerate(self.axes):
            if i < len(categories):

                # could use `self.subset_data` method here instead, perhaps
                subcat = categories[i]
                plot_data = self.get_facet_data(subcat)

                xdata = self.pull_data('x', plot_data)
                ydata = self.pull_data('y', plot_data)

                if categorical is 'x':
                    lookup = categorical_lookup(plot_data[self.mapping['x']]) if lookup is None else lookup
                    ax.scatter(xdata.replace(lookup), ydata, **kwargs)

                    if self.mapping['shadow'] is True:
                        shadow_data = self.plot_data.loc[lambda df: df[self.mapping['by']] != subcat]
                        shadow_x = shadow_data[self.mapping['x']]
                        shadow_y = shadow_data[self.mapping['y']]

                        ax.scatter(shadow_x.replace(lookup), shadow_y, **shadow_kwargs)

                elif categorical is 'y':
                    lookup = categorical_lookup(plot_data[self.mapping['y']]) if lookup is None else lookup
                    ax.scatter(xdata, ydata.replace(lookup), **kwargs)

                    if self.mapping['shadow'] is True:
                        shadow_data = self.plot_data.loc[lambda df: df[self.mapping['by']] != subcat]
                        shadow_x = shadow_data[self.mapping['x']]
                        shadow_y = shadow_data[self.mapping['y']]

                        ax.scatter(shadow_x, shadow_y.replace(lookup), **shadow_kwargs)

                else:  # if both variables are continuous
                    lookup = None
                    categorical = None
                    ax.scatter(xdata, ydata, **kwargs)

            else:
                ax.axis('off')

        if categorical in ('x', 'y'):
            self.discrete_axis(categorical, lookup)

        return self.apply_style()

    def layer_histogram(self, **kwargs):
        categories = sorted(self.plot_data[self.mapping['by']].unique())

        kwargs, shadow_kwargs = split_kwargs(kwargs, 'shadow_')

        kwargs = britishdict(kwargs)
        kwargs = combine_dict(
            self.style['layers']['histogram'],
            kwargs
        )

        shadow_kwargs = britishdict(shadow_kwargs)
        shadow_kwargs = combine_dict(
            self.style['shadow_defaults']['points'],
            shadow_kwargs
        )

        for kw in [kwargs, shadow_kwargs]:
            if 'binwidth' in kw.keys():
                x_range = self.data_range(dimension='x')
                kw['bins'] = np.arange(x_range[0], x_range[1], kw['binwidth'])
                kw.pop('binwidth', 0)

        for i, ax in enumerate(self.axes):
            if i < len(categories):

                subcat = categories[i]
                plot_data = self.plot_data.loc[lambda df: df[self.mapping['by']] == subcat]

                xdata = self.pull_data('x', plot_data)
                xdata = [x for x in xdata if np.isfinite(x)]

                ax.hist(xdata, **kwargs)

                if self.mapping['shadow'] is True:
                    shadow_data = self.plot_data.loc[lambda df: df[self.mapping['by']] != subcat]
                    shadow_x = shadow_data[self.mapping['x']]

                    ax.hist(shadow_x, **shadow_kwargs)

            else:
                ax.axis('off')

        return self.apply_style()

    def layer_density(self, **kwargs):
        categories = sorted(self.plot_data[self.mapping['by']].unique())

        kwargs = britishdict(kwargs)

        for i, ax in enumerate(self.axes):
            if i < len(categories):
                subcat = categories[i]
                plot_data = self.plot_data.loc[lambda df: df[self.mapping['by']] == subcat]

                xdensity = gaussian_kde(self.pull_data('x', plot_data))

                x_range = self.data_range('x')
                xdata = np.linspace(x_range[0], x_range[1], 1000)
                ydata = xdensity.pdf(xdata)

                ax.fill(xdata, ydata, **kwargs)

        return self.apply_style()

    def layer_lines(self, **kwargs):
        categories = self.get_facet_variables()

        kwargs = britishdict(kwargs)
        kwargs = combine_dict(
            self.style['layers']['line'],
            kwargs
        )

        group_key = 'colour' if 'colour' in self.mapping.keys() else 'group'
        groups = np.unique(self.pull_data(group_key, self.data))

        colours = matplotlib.cm.get_cmap(self.style['colourmap'])

        for i, ax in enumerate(self.axes):
            if i < len(categories):
                subcat = categories[i]

                for gi, g in enumerate(groups):
                    plot_data = (
                        self.plot_data
                        .pipe(self.filter_plot_data, mapkey='by', value=subcat)
                        .pipe(self.filter_plot_data, mapkey=group_key, value=g)
                    )

                    xdata = self.pull_data('x', plot_data)
                    ydata = self.pull_data('y', plot_data)

                    if 'colour' in self.mapping.keys():
                        colour_index = 1 * gi / len(groups)  # scale to colourmap scale
                        kwargs = combine_dict(kwargs, {'color': colours(colour_index)})

                    kwargs = combine_dict(kwargs, {'label': g})  # add labels with overwriting (this could be an issue)
                    ax.plot(xdata, ydata, **kwargs)

            else:
                ax.axis('off')

        return self.apply_style()

    def layer_segments(self, **kwargs):
        categories = sorted(self.plot_data[self.mapping['by']].unique())

        kwargs = britishdict(kwargs)

        for i, ax in enumerate(self.axes):
            if i < len(categories):

                subcat = categories[i]
                plot_data = self.plot_data.loc[lambda df: df[self.mapping['by']] == subcat].reset_index(drop=True)

                xdata = self.pull_data('x', plot_data)
                ydata = self.pull_data('y', plot_data)
                x2data = self.pull_data('x2', plot_data)
                y2data = self.pull_data('y2', plot_data)

                for xi in range(len(xdata)):
                    x = (xdata[xi], x2data[xi])
                    y = (ydata[xi], y2data[xi])

                    ax.plot(x, y, **kwargs)

            else:
                ax.axis('off')

        return self.apply_style()

    def layer_text(self, categorical=None, lookup=None, check_overlap=False, **kwargs):
        categories = self.get_facet_variables()

        kwargs = britishdict(kwargs)
        kwargs, adjust_kwargs = split_kwargs(kwargs, 'adj_')

        for i, ax in enumerate(self.axes):
            if i < len(categories):

                subcat = categories[i]
                plot_data = self.get_facet_data(subcat).reset_index()

                xdata = self.pull_data('x', plot_data)
                ydata = self.pull_data('y', plot_data)
                txt_data = self.pull_data('label', plot_data)

                if categorical is 'x':
                    lookup = categorical_lookup(plot_data[self.mapping['x']]) if lookup is None else lookup
                    xdata = xdata.replace(lookup)
                if categorical is 'y':
                    lookup = categorical_lookup(plot_data[self.mapping['y']]) if lookup is None else lookup
                    ydata = ydata.replace(lookup)

                if check_overlap is True:
                    texts = []
                    for txt_i, txt in enumerate(txt_data):
                        texts.append(ax.text(xdata[txt_i], ydata[txt_i], str(txt), **kwargs))

                    adjust_text(texts, xdata, ydata, ax=ax, **adjust_kwargs)
                else:
                    for txt_i, txt in enumerate(txt_data):
                        # annotate is preferred else text isn't limited by axes limits
                        ax.annotate(str(txt), (xdata[txt_i], ydata[txt_i]), **kwargs)

            else:
                ax.axis('off')

        return self.apply_style()

    def layer_errorbars(self, categorical=None, **kwargs):
        categories = sorted(self.plot_data[self.mapping['by']].unique())

        kwargs = britishdict(kwargs)

        for i, ax in enumerate(self.axes):
            if i < len(categories):

                subcat = categories[i]
                plot_data = self.plot_data.loc[lambda df: df[self.mapping['by']] == subcat]

                xdata = self.pull_data('x', plot_data)
                ydata = self.pull_data('y', plot_data)
                xerror = self.pull_data('x_error', plot_data)
                yerror = self.pull_data('y_error', plot_data)

                if categorical is 'x':
                    lookup = categorical_lookup(plot_data[self.mapping['x']])
                    ax.errorbar(xdata.replace(lookup), ydata, xerr=xerror, yerr=yerror, **kwargs)

                elif categorical is 'y':
                    lookup = categorical_lookup(plot_data[self.mapping['y']])
                    ax.errorbar(xdata, ydata.replace(lookup), xerr=xerror, yerr=yerror, **kwargs)

                else:  # if both variables are continuous
                    lookup = None
                    categorical = None
                    ax.errorbar(xdata, ydata, xerr=xerror, yerr=yerror, **kwargs)

            else:
                ax.axis('off')

        if categorical in ('x', 'y'):
            self.discrete_axis(categorical, lookup)

        return self.apply_style()

    def layer_ribbons(self, categorical=None, **kwargs):
        categories = sorted(self.plot_data[self.mapping['by']].unique())

        kwargs = britishdict(kwargs)

        for i, ax in enumerate(self.axes):
            if i < len(categories):

                subcat = categories[i]
                plot_data = self.plot_data.loc[lambda df: df[self.mapping['by']] == subcat]

                xdata = self.pull_data('x', plot_data)
                y_lo_data = self.pull_data('y_lower', plot_data)  # could change these labels to be same as errorbars
                y_up_data = self.pull_data('y_upper', plot_data)  # ... or change error bars (probably preferable)

                lookup = None
                categorical = None
                ax.fill_between(xdata, y1=y_lo_data, y2=y_up_data, **kwargs)

            else:
                ax.axis('off')

        if categorical in ('x', 'y'):
            self.discrete_axis(categorical, lookup)

        return self.apply_style()

    def layer_heatmap(self, **kwargs):
        categories = self.get_facet_variables()

        kwargs, _ = split_kwargs(kwargs, 'shadow_')

        kwargs = britishdict(kwargs)
        kwargs = combine_dict(
            self.style['layers']['heatmap'],
            kwargs
        )
        kwargs = combine_dict(
            {'cmap': self.style['scales']['cmap']},
            kwargs
        )

        for i, ax in enumerate(self.axes):
            if i < len(categories):

                # could use `self.subset_data` method here instead, perhaps
                subcat = categories[i]
                plot_data = self.get_facet_data(subcat)

                # reshape data into matrix
                plot_matrix = pd.pivot_table(
                    plot_data,
                    index=self.mapping['y'],
                    columns=self.mapping['x'],
                    values=self.mapping['colour'],
                    fill_value=0  # could include this as a kwarg...
                )

                ax.imshow(plot_matrix, **kwargs)

            else:
                ax.axis('off')

        return self.apply_style()

    def layer_calcline(self, func, **kwargs):
        categories = sorted(self.plot_data[self.mapping['by']].unique())
        kwargs = britishdict(kwargs)

        for i, ax in enumerate(self.axes):
            if i < len(categories):
                xlim = ax.get_xlim()
                xline = np.linspace(xlim[0], xlim[1], 500)
                yline = [func(x) for x in xline]

                ax.plot(xline, yline, **kwargs)

                ax.set_xlim(xlim)

        return self

    def layer_refline(self, slope=None, intercept=None, invert=False, **kwargs):
        categories = sorted(self.plot_data[self.mapping['by']].unique())
        kwargs = britishdict(kwargs)
        kwargs = combine_dict(
            self.style['layers']['refline'],
            kwargs
        )

        for i, ax in enumerate(self.axes):
            if i < len(categories):
                if not invert:
                    xline = ax.get_xlim()
                    yline = [i * slope + intercept for i in xline]
                else:
                    yline = ax.get_ylim()
                    xline = [i * slope + intercept for i in yline]

                ax.plot(xline, yline, **kwargs)

        return self

    def layer_vline(self, intercept=0, y_range=None, annotation='', **kwargs):
        categories = sorted(self.plot_data[self.mapping['by']].unique())
        kwargs = britishdict(kwargs)
        kwargs = combine_dict(
            self.style['layers']['refline'],
            kwargs
        )

        for i, ax in enumerate(self.axes):
            if i < len(categories):
                subcat = categories[i]
                plot_data = self.plot_data.loc[lambda df: df[self.mapping['by']] == subcat]

                if callable(intercept):
                    xintercept = intercept(plot_data[self.mapping['x']])
                else:
                    xintercept = intercept

                yline = ax.get_ylim() if y_range is None else y_range
                xline = [xintercept, xintercept]
                ax.plot(xline, yline, **kwargs)
                ax.annotate(annotation, (xline[1], yline[1]),
                            va='center', ha='right',
                            color=self.style['axes']['title']['color'])
                ax.set_ylim(yline)

        return self

    def layer_hline(self, intercept=0, x_range=None, annotation='', **kwargs):
        categories = sorted(self.plot_data[self.mapping['by']].unique())
        kwargs = britishdict(kwargs)
        kwargs = combine_dict(
            self.style['layers']['refline'],
            kwargs
        )

        for i, ax in enumerate(self.axes):
            if i < len(categories):
                subcat = categories[i]
                plot_data = self.plot_data.loc[lambda df: df[self.mapping['by']] == subcat]

                if callable(intercept):
                    yintercept = intercept(plot_data[self.mapping['y']])
                else:
                    yintercept = intercept

                xline = ax.get_xlim() if x_range is None else x_range
                yline = [yintercept, yintercept]

                ax.plot(xline, yline, **kwargs)
                ax.annotate(annotation, (xline[1], yline[1]),
                            va='bottom', ha='right',
                            color=self.style['axes']['title']['color'])
                ax.set_xlim(xline)

        return self

    def layer_trendline(self, objective_function=lambda x, a, b: a * x + b, **kwargs):

        categories = sorted(self.plot_data[self.mapping['by']].unique())
        kwargs = britishdict(kwargs)
        kwargs = combine_dict(
            self.style['layers']['trendline'],
            kwargs
        )

        for i, ax in enumerate(self.axes):
            subcat = categories[i]
            plot_data = self.plot_data.loc[lambda df: df[self.mapping['by']] == subcat]

            xdata = self.pull_data('x', plot_data)
            ydata = self.pull_data('y', plot_data)

            params, _ = op.curve_fit(objective_function, xdata, ydata)

            self.fitted_parameters.append(params)

            xlims = ax.get_xlim()
            ylims = ax.get_ylim()

            x = np.linspace(xlims[0], xlims[1], 100)
            y = objective_function(x, *params)

            ax.plot(x, y, **kwargs)

            ax.set_xlim(xlims)
            ax.set_ylim(ylims)

        return self.apply_style()

    # Smaller helper functions

    def data_range(self, dimension):
        # could put this elsewhere in a different utils file?
        return min(self.plot_data[self.mapping[dimension]]), max(self.plot_data[self.mapping[dimension]])

    def check_mapping(self, mapname):
        try:
            self.mapping[mapname]
        except KeyError:
            print('No mapping for required argument \'' + mapname + '\' specified.')

    def get_facet_variables(self):
        facet_column = self.mapping['by']
        if facet_column is None:
            return None
        else:
            # should check for errors here
            return sorted(self.plot_data[facet_column].unique())

    def get_facet_data(self, subcategory):
        # redundant with `filter_plot_data`
        facet_column = self.mapping['by']
        if facet_column is None:
            return self.plot_data
        else:
            return self.plot_data.loc[lambda df: df[facet_column] == subcategory]

    # Styling

    def add_legend(self, legend_axes=(0,), *args, **kwargs):
        kwargs = combine_dict(
            self.style['legend'],
            kwargs
        )
        for i in legend_axes:
            ax = self.axes[i]
            ax.legend(*args, **kwargs)
        return self

    def tight_layout(self, *args, **kwargs):
        self.fig.tight_layout(*args, **kwargs)
        return self

    def set_xlim(self, lims, **kwargs):
        # `set_xlim(...)` ?
        for ax in self.axes:
            ax.set_xlim(lims, **kwargs)
        return self

    def set_ylim(self, lims, **kwargs):
        for ax in self.axes:
            ax.set_ylim(lims, **kwargs)
        return self

    def set_xlab(self, lab):
        self.labels['xlab'] = lab
        return self.apply_style()

    def set_ylab(self, lab):
        self.labels['ylab'] = lab
        return self.apply_style()

    def set_subtitle(self, subtitle=None, **kwargs):
        # should it be plural (`set_subtitles(...)`)?
        for k, v in self.style['subtitle'].items():
            if k not in kwargs.keys():
                kwargs[k] = v

        if subtitle is None:
            if len(self.axes) > 1:
                subtitle = sorted(self.plot_data[self.mapping['by']].unique())
                subtitle = [prettify(sub) for sub in subtitle]
            else:
                subtitle = ''

        if isinstance(subtitle, (list, tuple)):
            for sub, ax in zip(subtitle, self.axes):
                ax.set_title(sub, **kwargs)
        else:
            for ax in self.axes:
                ax.set_title(subtitle, **kwargs)

        return self

    def set_title(self, title=None, **kwargs):

        for k, v in self.style['title'].items():
            if k not in kwargs.keys():
                kwargs[k] = v

        self.fig.suptitle(title, **kwargs)

        return self

    def pipe(self, func, obj=None, *args, **kwargs):
        if obj is None:
            func(self, *args, **kwargs)

        elif obj == 'data':
            self.plot_data = func(self.plot_data, *args, **kwargs)

        elif obj == 'fig':
            func(self.fig, *args, **kwargs)

        elif obj == 'ax':
            for ax in self.axes:
                func(ax, *args, **kwargs)

        return self

    def save(self, file_location, **kwargs):
        self.fig.savefig(file_location, **kwargs)

    def show(self):
        self.fig.show()

redpajama_set_name: RedPajamaGithub


text:
Il torneo di pallanuoto alla XXIV Universiade fu la ventiduesima edizione del torneo alle Universiadi. Il torneo cominciò venerdì 10 agosto 2007 e terminò venerdì 17 agosto.

Turni preliminari

Gruppo A

Gruppo B

Gruppo C

Gruppo D

Secondo turno

Gruppo E

Play-Off

Finali
11º posto

9º posto

7º posto

5º posto

3º posto

1º posto

Classifica finale

Campione

Universiadi
Pallanuoto alle Universiadi
Sport alla XXIV Universiade

redpajama_set_name: RedPajamaWikipedia


text:
News|GCC
Qatar's Sheikh Tamim and Donald Trump to meet in April
Sheikh Tamim bin Hamad Al Thani invited by US President Donald Trump for meeting in the US capital.
Qatari Emir Sheikh Tamim Bin Hamad Al-Thani has agreed to meet with Trump in April [Jonathan Ernst/Reuters]
The Qatari government has announced that Emir Tamim bin Hamad Al Thani will attend an April meeting in Washington, DC, with US President Donald Trump.
The two leaders spoke by phone on Wednesday about regional developments and opportunities to "enhance the American-Qatari partnership on a range of security and economic issues", according to a White House press release.
It was during the phone conversation that Trump extended the invitation.
"The leaders agreed on the importance of regional cooperation and a united Gulf Cooperation Council to mitigate regional threats and ensure the region's economic prosperity," the White House release said.
Qatar has faced a blockade from Saudi Arabia, the UAE, Bahrain and Egypt since June, alleging Qatari support for "extremist" groups.
Qatar has strenuously denied the allegations.
The Saudi-led blockade came after a regional meeting between Trump, Egypt's President Abdel-Fattah el-Sisi and Saudi King Salman bin Abdulaziz Al Saud.
Other members of the US government, including Rex Tillerson, the secretary of state, have voiced support for Qatar, which is host to the US military's central base of command for operations in the Middle East.
Al Jazeera's Rosiland Jordan, reporting from Washington, DC, said that Trump has been calling Gulf leaders in recent days to discuss confronting the threat from the Islamic State of Iraq and the Levant (ISIL) group.
Jordan noted that other Gulf leaders will be present in Washington in April, but efforts to hold a summit to end the crisis are still "up in the air".
Latest updates: Houthi rebels warn of further attacks on UAE
'Much remains unknown': Tonga still cut off by volcanic eruption

redpajama_set_name: RedPajamaCommonCrawl


Nortada yacht was built in France by naval builder Guy Couach. She's a completely rebuilt and refit private liveaboard charter boat for small groups of up to 8 divers. Nortada was bought by Rolf Wittmer Turismo in 2008 and went through a full refurbishment in Guayaquil, Ecuador until December 2014. She started operations as a scuba diving liveaboard in Galapagos islands in February 2015.
Nortada is a magnificent 85 feet yacht offering 4 lower deck, fully air conditioned ensuite cabins with two twin beds and one bunk berth, lockers and drawers. The upper berths offer possibility to accommodate 4 extras guests when the yacht is chartered.
Shared areas consist of a main deck with bridge, galley, air conditioned dining room and lounge. The scuba diving platform has ample benches, outside showers, camera tables and rebreather rinsing facilities. Nitrox is available as well as rebreathers and technical diving support.
In the upper deck a sun deck is next to the fly bridge.
Two 15 foot inflatable tenders with 25HP outboard engines takes fully equipped divers to and from the dive site. All divers are provided with a Nautilus Lifeline VHF/DSC marine radio with GPS, diver alert and SMB. One cruise director and one guide, english speaking, will supervise two dive groups of 4 divers each.
Yacht crew consist of one captain, one engineer, one cook, two sailors and one naturalist english speaking guide.
Nortada features modern communication and safety devices, as Furuno Navnet radar/chart plotter, Eco sounder, HF-MF/DSC radio, VHF/DSC Icom radios, rescue radio, magnetic compass, hydraulic helm, searchlight, horn, fire & smoke detector system, two inflatable life rafts for 16 passengers each, life jackets, all safety equipment complies with international coast guard regulations.
Liveaboard departure is scheduled every friday from Santa Cruz island, for 8 days/7 nights itinerary 8 jours/7 nights with 20 dives.


can my videocard be used for video editing?
I have a radeon hd 4600 with the latest graphics and a 3.39ghz a4 5300 cpu. Can I use it for video editing for at least 1080p in quality?
This would depend on the software one is using as each software developer creates their own specs. It is best to randomly select a program like Photoshop etc and view their specs.


text:
We are looking at Rajasthan with big vision: RK Vishnoi, Chairman & Managing Director, THDC India Ltd
"The advantage with Rajasthan state is that large chunks of land are available at one place and the development cost is much less as compared to other states."
Kartik Sharma
RK Vishnoi, Chairman & Managing Director, THDC India Ltd
THDC India Limited, a subsidiary of National Thermal Power Corporation (NTPC), Ministry of Power, Government of India, is primarily mandated to develop, operate and maintain the Tehri Hydro Power Complex and other hydro projects. A Mini Ratna Category-I enterprise, THDC currently has a portfolio of 10 projects that include hydro, thermal, wind and solar with a total capacity of 4,516MW.
"The advantage with Rajasthan state is that large chunks of land are available at one place and the development cost is much less as compared to other states, says RK Vishnoi, Chairman & Managing Director of THDC India Ltd in an interaction with Kartik Sharma of ETGovernment.
Edited excerpts:
Please give us an overview of the operations of THDC India Ltd.
This organization was born 33 years back and this was a single project organization initially. the objective of developing one of the largest hydropower complex of the country that was 2400 MW complex. We developed this largest hydropower complex in phases, the phase one of this complex that is 1000 megawatt Tehri, which we commissioned in the year 2005 And then phase two in 2010. And phase three is still continuing and will be commissioning this year by the end of 2022. Now, with the intent of growth and to align with the change in the country's power scenario we decided to enter into renewables about eight to 10 years back. We started with the wind energy sector where we developed two wind power plants in Gujarat, then we developed a 150 megawatt solar plant in Kerala.
What about THDC's entry into the pumped storage business?
We realized that the power scenario of the country demands a lot of storage capacity in the grid, because of the introduction of so many renewables from at least half a dozen states, where we have a lot of sunshine and wind happening there. And what we found was that the renewable plants, which have been established in these states are being curtailed, because of the shortage in demand because of the absence of dispatchable power. The government realized the need to absorb this power, which is so uncertain in nature. As THDC was already doing one PSP of 1000 megawatt, we were asked to work on that and we finally concluded that there is going to be a great demand for storage assets and we need to have it necessarily in the grid.
What are your ambitious plans for Renewable Energy?
Taking a big stride in the renewable sector, we are now going to develop 10,000 megawatt solar energy parks in the state of Rajasthan. That is our biggest decision and we have signed an MOU with the state of Rajasthan for the same. THDC is in the best position because we have all kinds of resources in our basket today. So, far we are 100% green power company except that one thermal power plant which we are building just to enhance our baseload capacity, and then the 1000 megawatt is the pumped the storage plant which will be commissioned this year, it enables me to develop more and more renewables and provide the better quality power to the grid.
How do you see THDC contributing in Rajasthan's Renewable Energy journey?
We are looking at Rajasthan with great hopes. The advantage with the state is that large chunks of land are available at one place and the development cost is much less as compared to other states, where we try to develop the solar park by joining all the separate pieces into one big solar park. So, this cost of development of Solar Park in Rajasthan is the real advantage to the solar developer and we are looking at it from the point of view of bigger returns. Also, Rajasthan is one of the beneficiaries as we supply a lot of electricity to the state and we have our own relations also and the state is very, very investor friendly state, this is the image of the state of Rajasthan, a lot of companies have already developed their plants there and they have good experiences in the industry. So, in the industry, the state enjoys a good reputation. So, this is something which has, you know, brought us to the state of Rajasthan and we want to have a good and bigger presence in this state. This 10,000 megawatt is just the beginning, we are looking at it in a much bigger way in the state.
thdc india ltd
rk vishnoi
national thermal power corporation
mini ratna category
Ministry of Power
MeitY's R&D institute SAMEER collaborates with Siemens Healthineers for low-cost MRI technology
Opinion: How companies can showcase their commitment to data privacy through ESG framework


text:
Around Webster: Turaeva, Krueger, Baden, Cosic
news around webster
Turaeva
Nigora Turaeva and Herman Krueger co-published an article available at MDPI, "Wolkenstein's Model of Size Effects in CO Oxidation by Gold Nanoparticles."
Both are members of the Department of Biological Sciences in Webster's College of Arts & Sciences.
Turaeva also published an article on simple electronic model of enzymatic reactions on the mechanism of enzymatic reactions in volume 1180 of Elsevier's Computational and Theoretical Chemistry.
And Turaeva co-authored the published paper, "Non-poissonian Distribution of Point Mutations in DNA," in Frontiers in Chemistry: Theoretical and Computational Chemistry, with Boris L. Oksengendler of the Arifov Institute of ion-plasma and Laser Technologies in Tashkent, Uzbekistan, and Ural Federal University in Yekaterinburg, Russia.
Baden Receives ACUI Distinguished Faculty Award
Larry Baden has received the Distinguished Faculty Award from the Association of College Unions International (ACUI).
Baden was nominated by a group of Webster staff members, faculty, current students and/or alumni for his service and work on building connections between academic and co-curricular areas on campus. He is associate professor in the Department of Communications and Journalism, in the School of Communications
"In addition to teaching, he advises student organizations, collaborates on the development of residential learning communities, and serves as a faculty NCAA liaison," his nominators said.
Read the full citation at ACUI here.
Cosic's '2nd Nature' SLSO Collaboration Previewed
Zlatko Cosic's pandemic-postponed collaboration with St. Louis composer Christopher Stark was broadcast by the St. Louis Symphony Orchestra as part of its "SLSO at Home" series.
St. Louis Symphony Orchestra violinist Shawn Weil was scheduled to give the world premiere of the multimedia piece, "2nd Nature," by Stark at a March St. Louis Symphony: Live at the Pulitzer performance.
Though the performance had to be postponed, they look forward to when Weil can perform this immersive work in person. In this #SLSOatHome video, he gives a preview of the piece, which was inspired by a trip to Asia by the two musicians. Cosic, a St. Louis video artist, Webster alumnus and School of Communications adjunct faculty member, created the stunning visual aspect using images and videos from the trip.


"One of the things I'm often asked as a vet, is 'how do you give your mutt that much needed manicure?' Well here are a few quick and easy steps to make nail clipping a breeze.
First, get yourself a pair of nail clippers just for dogs, then find the 'quick' or 'bloodline' in the nail. You cut just below the quick, about where the nail starts to curve. If you're not sure, it's better to trim too little than too much.
If you do cut into the quick and it starts to bleed, don't panic, corn flour packed into the nail will stop the bleeding and help it to heal.
Don't forget that sneaky little claw on the inside, the dew claw. Give that a clip, otherwise when they jump up, they scratch you on the inside of the legs. Very nasty.
How often do dogs need a manicure? About every two to three months."


Metalwo manufactures complete operating panels for managing maritime communication.
We supply maritime customers with keyboards for operating communication systems. The actual configuration is a combination of a front panel with silicone buttons and a built-in transparent panel.
We have adapted the product to match where it is to be used. For example, the telephone system is designed for satellite telephony and for communicating alarms on board ships.


The Johannesburg Stock Exchange (JSE) has signed a multi-year licensing agreement with Eris Exchange (Eris), a US-based futures exchange group, to list swap futures on the South African Exchange.
The initial focus of the agreement will be to list and trade Interest Rate Swap (IRS) futures. These products will be based on the Johannesburg Interbank Agreed Rate (JIBAR) and denominated in South African Rand (ZAR). The products will follow the standard South African swap market conventions while using the Eris Methodology, allowing the contracts to replicate the cash flows of OTC swaps.
Authorised trading members and their clients will only need standard futures documentation, rather than ISDA Master Agreements that are required to trade bilateral OTC swaps.


text:
Dolly Parton, Legendary Singer, Songwriter, and Philanthropist, Celebrates Her 75th Birthday
Making an Impact: 40 Mighty Girl Books About Charity and Community Service
Damsels in Charge: 40 Fairy Tales Starring Mighty Girls
On The Move All Year Round: 50 Toys and Games for Indoor Active Play
The Fragility of Freedom: Mighty Girl Books About Life Under Authoritarianism
About Our Newsletter
A Mighty Girl Creators
A Mighty Girl Spotlight
A Mighty Girl Top Pick
Ask A Mighty Girl
Mighty Careers
Category: 19th Amendment
Mighty Girl Suffragists Remind Us to 'Get Out and Vote!' this Election Day
A photo collection of Mighty Girls who honored the suffragists who fought for women's right to vote this Halloween!
On Halloween, many Mighty Girls took the opportunity to honor their heroes — and encourage adults to exercise their hard-earned right to vote this Election Day! These Mighty Girls dressed up as suffragists, or suffragettes as they were often called in Britain, paying tribute to the bold women who fought for women's right to vote. In America, the fight for the vote lasted for over 70 years, and countless women struggled, protested, and were imprisoned for the cause. As suffrage leader Lucy Burns, who served more jail time than any other American suffragist, once observed: "I think we have done all this for women, and we have sacrificed everything we possessed for them, and now let them fight for it now."
Continue reading → Continue reading
How Women Won The Vote: Books for Kids & Adults About the U.S. Suffrage Movement
The top books and films for children and adults about the 72-year fight for women's suffrage in the United States.
For children today, it's hard to imagine a time when women couldn't vote; realizing that they've had that right for only 100 years is astounding. It's equally shocking when they learn that women had to fight for 72 years before the 19th Amendment — which stated that no citizen could be denied the right to vote on account of sex — became law. So it's imperative that we teach today's children about the struggle for women's suffrage, not just to honor the dedication and sacrifices of the women who led the Women's Suffrage Movement, but also to ensure that future generations don't take the right to vote for granted. Continue reading → Continue reading


Thursday, Sept 28th 11:30-1:30 pm @ St.Mark's Church in New Canaan.
Keynote Speaker: "Tommy Rosen is a pioneer in the field of Yoga and Recovery. He has spent the last two decades immersed in yoga, recovery and wellness and is the founder and host of the Recovery 2.0:Beyond Addiction Online Conference Series" RSVP required.


The term drug crime conjures the image of meeting someone in a back alley to buy marijuana or heroin. But for many Collin County residents, drug crimes involve everyday products you get at the local pharmacy. In fact, Texas prosecutors have increasingly focused on prescription drug crimes, especially those involving popular pain medications.
Prescription drugs are classified as "controlled substances" by federal and state laws. This means it is illegal for anyone to possess them without a doctor's prescription. So, for example, if you take one of your spouse's prescription sleeping pills, you are committing a crime.
Now, your spouse is unlikely to report you to the police. But consider a sadly all-too-common scenario. Many elderly Collin County residents have trouble making ends meet, so they decide to resell some of their prescription medication pills to people suffering from drug addiction. Nobody wants to think of grandma as a drug dealer, but in the eyes of the law, that is what she is.
And it is not just the elderly. Prescription drug abuse is also common among teens and young adults in Texas. In many cases a teenager will take prescription drugs from their parents' medicine cabinet and sell them at school. If you do not keep a careful watch over your own prescriptions, you may be surprised to find one day the police are at your door seeking to interview or even arrest your son or daughter.
On the other end of the spectrum, many people are charged with fraudulently obtaining prescriptions. This is often the case with people who become addicted to pain medication. Some people are so desperate they steal their doctor's prescription pad. In other cases, an addict may go obtain multiple prescriptions from different doctors or they may try and alter a legitimate prescription to increase the quantity or dosage.
– Related article: Stats On Prescription Pill Addiction From Transitions Recovery Program.
All of these acts are considered criminal offenses. Texas law enforcement has become especially aggressive in recent years in pursuing prescription drug fraud related to opioids (pain relievers), sedatives and antidepressants, and stimulants. Some of the more commonly abused prescription drugs include Buprenorphine, Oxycodone, Oxycontin, Ritalin, Valium, Vicodin, and Xanax.
What Should I Do If I'm Charged with a Prescription Drug Crime in Collin County?
If you are charged with a prescription drug crime, the important thing is not to panic or try to deal with law enforcement by yourself. You need to contact an experienced Collin County drug crimes lawyer who knows how to deal with cases like yours. Call Rosenthal & Wadas today at 972-369-0577 to schedule a consultation with one of our qualified Collin County criminal defense attorneys.
‹ What Is a Prohibited Weapon in Texas?


text:
105 ILCS 5/10-21.4
(105 ILCS 5/10-21.4) (from Ch. 122, par. 10-21.4)
Sec. 10-21.4. Superintendent - Duties. Except in districts in which there is only one school with fewer than 4 teachers, to employ a superintendent, who shall have charge of the administration of the schools under the direction of the board of education. However, in any school district that has boundaries that lie in 3 counties, one county of which has a population exceeding 1,000,000 inhabitants, that has an enrollment of more than 35,000 students, and that has on staff properly licensed assistant superintendents or directors in the areas of instruction, finance, special education, assessments, and career and technology education, the school board may instead, by a vote of a majority of its full membership, appoint a chief executive officer to serve as its superintendent, who shall be a person of recognized administrative ability and management experience, hold a master's degree, have been employed with the school district for a minimum of 5 years in an administrative capacity, be responsible for the management of the district, and have all other powers and duties of a superintendent as set forth in this Code, but who shall be exempt from the provisions and requirements of Section 21B-15 of this Code for a period of 5 years.
In addition to the administrative duties, the superintendent shall make recommendations to the board concerning the budget, building plans, the locations of sites, the selection, retention and dismissal of teachers and all other employees, the selection of textbooks, instructional material and courses of study. However, in districts under a Financial Oversight Panel pursuant to Section 1A-8 for violating a financial plan, the duties and responsibilities of the superintendent in relation to the financial and business operations of the district shall be approved by the Panel. In the event the Board refuses or fails to follow a directive or comply with an information request of the Panel, the performance of those duties shall be subject to the direction of the Panel. The superintendent shall also notify the State Board of Education, the board and the chief administrative official, other than the alleged perpetrator himself, in the school where the alleged perpetrator serves, that any person who is employed in a school or otherwise comes into frequent contact with children in the school has been named as a perpetrator in an indicated report filed pursuant to the Abused and Neglected Child Reporting Act, approved June 26, 1975, as amended. The superintendent shall keep or cause to be kept the records and accounts as directed and required by the board, aid in making reports required by the board, and perform such other duties as the board may delegate to him.
In addition, each year at a time designated by the State Superintendent of Education, each superintendent shall report to the State Board of Education the number of high school students in the district who are enrolled in accredited courses (for which high school credit will be awarded upon successful completion of the courses) at any community college, together with the name and number of the course or courses which each such student is taking.
The provisions of this Section shall also apply to board of director districts.
Notice of intent not to renew a contract must be given in writing stating the specific reason therefor by April 1 of the contract year unless the contract specifically provides otherwise. Failure to do so will automatically extend the contract for an additional year. Within 10 days after receipt of notice of intent not to renew a contract, the superintendent may request a closed session hearing on the dismissal. At the hearing the superintendent has the privilege of presenting evidence, witnesses and defenses on the grounds for dismissal. The provisions of this paragraph shall not apply to a district under a Financial Oversight Panel pursuant to Section 1A-8 for violating a financial plan.


text:
La colagenasa es una enzima, más específicamente una metaloproteinasa de matriz que rompe los enlaces peptídicos de los colágenos que pueden ser tipo (I, II, III, IV, V) y que contiene zinc.
Son una familia de enzimas de diversos orígenes celulares y especificidades para distintos sustratos.
Estas enzimas también ayudan a destruir estructuras extracelulares en la fagogénesis de las bacterias como por ejemplo la clostridium.
Estas enzimas aparte de degradar al colágeno, como son MMP (metaloproteinasa de matriz), inactivan la AAT y activan la TNF-alpha. La colagenasa actúa principalmente sobre tejido conectivo en células musculares y en algunas otras partes del cuerpo.

La colagenasa puede ser producida durante una respuesta inmunológica, por la citocina que estimula células como los fibroblastos y los osteoblastos, requieren iones de calcio para entrar en actividad. Actualmente es comercializada por Abbott Laboratories bajo el nombre comercial de Iruxol.

Usos terapéuticos

La colagenasa ha sido aprobada por los médicos para utilizarse como cicatrizante, se utiliza generalmente en úlceras, escaras, quemaduras y lesiones. La colagenasa medicinal es una enzima que se extrae del medio de cultivo del clostridium y se utiliza para eliminar los restos celulares y extracelulares del tejido necrosado. Contribuye en la formación del nuevo tejido y reepitelización de las úlceras y escaras dérmicas. El colágeno del tejido sano o recién formado no es atacado por la colagenasa.

Contraindicaciones:
Alergia al fármaco

Véase también
 colágenos
 enzima

Referencias

Enlaces externos
 https://web.archive.org/web/20101223205410/http://aprendertodo.info/colagenasa/
 http://www.ncbi.nlm.nih.gov/pubmed/21342246
 http://epoccompuestos.blogspot.com/2008/09/metaloproteinasas-colagenasas-y-su.html

Genes del cromosoma 11


Please read through the manual before using the machine.
FlexHCD is a versatile, high performance, sample changer system designed to be used in automatized synchrotron beamlines to handle biological crystallized samples at cryogenic temperatures. It allows the users to automatically transfer samples from the High Capacity Dewar to the diffractometer and back. It is based on a 6-axes robotic arm and a high capacity dewar. FlexHCD has been developed by the EMBL Diffraction Instrumentation Group in collaboration with ESRF.
· User: People interacting with FlexHCD machine.
· Pin: small, slender, metallic tube or needle with mounted crystal support holding the sample to be exposed to xrays.
· Cap: support/base of the pin.
· Sample holder: Cap + pin.
· Vial: sample holder reservoir and protecting device.
· Puck: Device that stocks several sample holders in order to ease their transport.
holder and hold them when the robot is moving.
· Robot controller: Unit holding control electronics and power supply for robotic arm movements.
· De-freezing station: Gripper drying device mounted on the tool bank.
· Main rack: Closed cabinet containing electrical & pneumatic devices of the machine.
unmount samples to and from the goniometer.
To prevent damage to the equipment or personal injury it is mandatory to read the following safety precautions before use. To prevent possible injury, read all warnings before using this equipment. Any use of the machine not described in this manual is considered as non-compliant.
Do not open the experimental hutch doors while mounting or unmounting a sample.
Do not move the detector while mounting or unmounting a sample.
Dewar Loading Mode: It must be active to load and unload the High Capacity Dewar with your samples.
Sample Transfer Mode: Active only with hutch interlocked, allows you to mount and unmount samples on goniometer from MXCube interface.
To load the High Capacity Dewar (HCD) with your samples, follow the steps described down below.
Wear cryogenic gloves when loading HCD with your samples.
Warning against moving part. There is a risk of hitting or crushing when opening and closing HCD User Port.
When you enter the experimental hutch, you must press the green Puck Transfer Mode Button on the pendant near the High Capacity Dewar to put the machine in Dewar Loading Mode. The green button will light up and the touchscreen will be enabled.
Once Dewar Loading Mode is active, the touchscreen will show the Graphical User Interface (GUI) below.
When you touch a segment of the plate on the touchscreen the machine will automatically present this plate segment under the HCD User Port marked by the red circle.
The button placed in the upper right area of the GUI allows you to open and close HCD User Port.
Do not lean over HCD when opening User Port to avoid hitting.
During the loading process, every time you place a puck correctly in its slot, the FlexHCD will detect its presence. On the GUI, the corresponding HCD slot will change color from grey to red, as shown below. In the GUI a liquid nitrogen level indicator is also shown, as well as a table containing a summary of puck presence and type.
After interlocking the hutch you should see all your pucks displayed in MxCuBE. The puck position and type (either ''SC3'' or ''UniPuck") are displayed, as shown below.
To avoid collisions, please make sure you load each of your pucks in a compatible segment and that they are correctly placed and detected by the control system.
Every puck has a groove that must be aligned with the guiding finger on the puck slot inside the HCD to ensure correct placement.
Samples in non-detected pucks (not marked green) will not be mounted by the robot.
Once you have loaded all your pucks you have to make the system identify these pucks. For that you have to push the button "Identify pucks" on the touchscreen. This action can take several seconds. Once it's finished, all identified pucks will change color from red to green. Pucks that haven't been identified will remain red. In this case you have to verify the good positioning of the pucks in their slots. Once you have adjusted their positions, you can relaunch a new "Identify pucks" action.
When all your pucks are correctly identified you can close the User Port using the corresponding button on the touchscreen, interlock the hutch and proceed to the control cabin to begin data collection.
The Sample Changer will automatically switch to Sample Transfer Mode when hutch interlock is done.
Remember that you must not open the hutch, nor move the detector, while mounting or unmounting a sample. Do not enter the hutch when the 'Robot is moving' sign on the control panel is blinking.
At any time during HCD loading or unloading, if an emergency situation arrives, you can press the Emergency Stop button (Figure 1) to cut machine power. If this happens, get in touch with local contact to reset the machine.
Most problems can be overcome using the 'init' command in "sample changer" tab in MxCuBE once the experimental hutch has been interlocked.
If this does not work then interlock the hutch and log onto the FlexHCD computer using VNC on bacon (ID30B control computer). Check the status of the FlexHCD software on the top left. If it reports 'gripper unknown' then restart the FlexHCD software, MxCuBE and redo 'init'.
Do not try to do any intervention or manipulate the Sample Changer in a way that is not described in this manual.
If you find any problem or detect a malfunctioning of the Sample Changer, please get in touch with local contact.
and put the robot in the correct standby position. Once this action is done, the robot is ready for normal operation.


text:
Battlefield 1943, Bad Company 2 Announced
Maarten Goldstein
Electronic Arts studio DICE today confirmed that Battlefield: Bad Company 2 is in development, as Electronic Arts CEO John Riccitiello revealed a few days ago. In addition, the company revealed the development of Battlefield 1943.
Unlike the first Bad Company, which was only released for PlayStation 3 and Xbox 360, Bad Company 2 will also get a PC release. DICE promises a "level of fervor to vehicular warfare never before experienced in a modern warfare action game." Battlefield: Bad Company 2 is not expected until early next year, but gamers will still get their Battlefield fix this year as Battlefield 1943 will be released this summer.
A presumably budget-priced release, Battlefield 1943 is a downloadable multiplayer-only title coming to PC, PlayStation 3 and Xbox 360. It will feature 24 player action, three classic Battlefield locations--Wake Island, Guadalcanal and Iwo Jima--and uses the same Frostbite engine that powers Bad Company 2.
"Bad Company 2 takes everything that players liked in the original and ups the ante - more vehicles, more destruction and more team play," said Battlefield franchise executive producer Karl Magnus Troedsson. "Battlefield 1943 is a new take on a blast from the past classic coming to life with brand new technology."
DICE is also working on the free-to-play Battlefield Heroes, which is expected by April.
Xbox Live Marketplace
Star Wars Battlefront 2: Celebration Edition is free on the Epic Games Store this week
gohan2518
Battlefield 1943? I HAVE BEEN WAITING FOR THIS MOMENT FOR 7 YEARS!
wytefang
We're you waiting for only 3 maps for 3 years, too? ;)


text:
Cumulus Media Appoints Matt Longhenry as Music Director and On-Air Host, Afternoon Drive, for Indianapolis Country Station 95.5 WFMS
INDIANAPOLIS, IN – AUGUST 11, 2022 — Cumulus Media (NASDAQ: CMLS) announces that it has appointed Matt Longhenry (known on-air as Matt Malone) as the new Music Director and Afternoon Drive host for Indianapolis Country radio station 95.5 WFMS. Matt will debut in Afternoons on WFMS on Monday, August 22nd, and will be heard Monday through Friday from 3:00pm-7:00pm.
Longhenry, who worked part-time for Cumulus Grand Rapids from 2019-2020, was most recently Content/Program Director and Morning Show host for Mid-West Family Southwest Michigan at Country station WYTZ-FM in St. Joseph, MI. Previous stops in Longhenry's radio career include stations in Eau Claire and Madison, WI.
Christopher "Boomer" Layfield, Operations Manager, Cumulus Indianapolis, and WFMS Program Director, said: "Matt's a self-described 'country boy' who loves living the lifestyle – a perfect fit for WFMS! Throughout the talent search and interview process, Matt stood out from the pack for his ability AND his authenticity. Not only does he possess the skills to take command of the Music Director role and the passion to make great radio on-air, online, onsite and on social media, but he's also a genuinely good human that wants utilize his platform to entertain, engage, inform and assist. He will be a welcomed addition to WFMS and Cumulus Indy."
Longhenry said: "The opportunity to join a heritage station like WFMS with such a huge impact in the community and within the industry itself is a dream come true. Thanks to Boomer, Chuck Fredrick and everyone involved at Cumulus for believing in me and providing this incredible and exciting next step in this career that I love. I'm proud to be able to wear the legendary WFMS call letters and can't wait to join the family and get to work!"
To stream WFMS-FM, visit: https://www.wfms.com/.
Cumulus Media (NASDAQ: CMLS) is an audio-first media company delivering premium content to over a quarter billion people every month — wherever and whenever they want it. Cumulus Media engages listeners with high-quality local programming through 405 owned-and-operated radio stations across 86 markets; delivers nationally-syndicated sports, news, talk, and entertainment programming from iconic brands including the NFL, the NCAA, the Masters, CNN, the AP, the Academy of Country Music Awards, and many other world-class partners across more than 9,500 affiliated stations through Westwood One, the largest audio network in America; and inspires listeners through the Cumulus Podcast Network, its rapidly growing network of original podcasts that are smart, entertaining and thought-provoking. Cumulus Media provides advertisers with personal connections, local impact and national reach through broadcast and on-demand digital, mobile, social, and voice-activated platforms, as well as integrated digital marketing services, powerful influencers, full-service audio solutions, industry-leading research and insights, and live event experiences. Cumulus Media is the only audio media company to provide marketers with local and national advertising performance guarantees. For more information, visit www.cumulusmedia.com.


Log In to track Mike McKone on eReaderIQ.
to be notified each time the price drops on any book by Mike McKone.
to stop tracking Mike McKone.
Log In to track Tony Moore on eReaderIQ.
to be notified each time the price drops on any book by Tony Moore.
to stop tracking Tony Moore.
We started tracking this book on June 18, 2015.
The price of this book has changed 15 times in the past 1,405 days.
The current price of this book is $1.99 last checked 3 months ago.
This lowest price this book has been offered at in the past six months is $1.19.
The lowest price to date was $0.99 last reached on March 16, 2018.
The highest price to date was $1.99 last reached on November 3, 2018.
We last verified the price of this book about 3 months ago. At that time, the price was $1.99. This price is subject to change. The price displayed on the Amazon.ca website at the time of purchase is the price you will pay for this book. Please confirm the price before making any purchases.


Is there a fitness center at Marley Park?
There is no fitness center scheduled at this time. Marley Park is designed as a pedestrian-friendly community, and the Arbor Walk can be used for walking, biking, or running, and the numerous neighborhood parks provide outdoor recreation spaces, as well. Fitness classes are sometimes held at the Heritage Club as well.


Developed by KSY Land Developers Corporation, Alpha Salcedo offers spacious units from studios to three-bedroom residences that are fit for any family size. The building also features a wide array of services and facilities for residents and their guests to enjoy. Amenities include a swimming pool, fitness center, function rooms, a lounge and parking garage. Other services include 24-hour security, an automatic sprinkler system, and a 24-hour generator power backup. Adding to the appeal of Alpha Salcedo is its close proximity to places of interests as well as the Makati Central Business District. Nearby establishments and buildings include the popular Jaime Velasquez Park, Ateneo de Manila Graduate School, Greenbelt & Glorietta Malls, Makati Sports Club and The Philippine Stock Exchange.
Developed by KSY Land Developers Corporation, Alpha Salcedo offers spacious units from studio-type to three-bedroom residences that are fit for any family size. The building also features a wide array of services and facilities for residents and their guests to enjoy. Amenities include a swimming pool, fitness center, function rooms, a lounge, and parking garage. Other services include 24-hour security, an automatic sprinkler system, and a 24-hour generator power backup. Adding to the appeal of Alpha Salcedo is its close proximity to places of interests as well as the Makati central business district. Nearby establishments and buildings include Salcedo Park, Ateneo de Manila Graduate School, Greenbelt Mall, Glorietta Mall, The Peninsula Manila Hotel, Makati Shangri-La Hotel, Makati Sports Club, and The Philippine Stock Exchange. Alpha Salcedo not only marries comfort and convenience seamlessly, it also provides easy access to different modes of public transportation, pedestrian lanes and underpasses, and major thoroughfares.


text:
Q: How to keep yaml Format when using yaml.SafeDumper I have a YAML file
Version: "1.0"
title1: "Title 1"
title2: [Title 2]

I open the file using
def open_file(input_file):
    with open(input_file, encoding="utf8") as file:
        return_file = yaml.safe_load(file)
        return return_file

in runtime it looks like this:
{'Version': '1.0', 'title1': 'Title 1', 'title2': ['Title 2']}

the output I receive is:
Version: "1.0"
title1: Title 1
title2:
- Title 2

How do i keep the original formatting for "title1" and "title2" ?
I write the file as such:
    with open(output_file_name, "w", encoding="utf8") as dump_file:
        yaml.dump(<runtime_file>, dump_file, Dumper=MyDumper, sort_keys=False, allow_unicode=True)

with
class MyDumper(yaml.SafeDumper):
    def write_line_break(self, data=None):
        super().write_line_break(data)
        if len(self.indents) == 1:
            super().write_line_break()
        if len(self.indents) == 2:
            super().write_line_break()

A: You are using PyYAML and that supports only (a subset of) YAML 1.1, whereas YAML 1.2 was released more than thirteen
years ago. You should upgrade to ruamel.yaml (disclaimer: I am the author) that has been developed since 2014
to specifically preserve orginal layout, quotes, comments, anchors/aliases, number formats, etc.
import sys
import ruamel.yaml
from pathlib import Path

file_in = Path('input.yaml')
file_out = Path('output.yaml')

yaml = ruamel.yaml.YAML()
# yaml.indent(mapping=4, sequence=4, offset=2)
yaml.preserve_quotes = True
data = yaml.load(file_in)
yaml.dump(data, file_out)

print(file_out.read_text())

which gives:
Version: "1.0"
title1: "Title 1"
title2: [Title 2]

Since some of your scalar strings are superfluously quoted and others are not, you
cannot easily achieve this in PyYAML. You would have to load the quoted strings into
a different class than the non-quoted ones, so that they dump back as their originals.
Depending on what you need to do with those loaded data, you need to make those classes behave
mostly like a normal string. For that you need to dig into the PyYAML internals. ruamel.yaml takes
care of all of that for you (in its default round-trip mode).

redpajama_set_name: RedPajamaStackExchange


The iconic Kelly bag by Hermès with exquisite crocodile skin is a divine bag for both day and night.
This elegant Kelly bag by Hermes is made of exotic crocodile skin accented by gold hardware. Like all of its range, this bag has a top handle, metallic feet to protect the base and a front flap that gives space to an interior made in a matching tone, which has two pockets, one with zipper and another double and plane. This gorgeous piece comes with a matching detachable shoulder strap, allowing for both hand or shoulder carrying, making this piece both durable and versatile. It'ss a must-have for any Hermès collector.
Details: It has been to Hermès Spa to fix the strap. Mark on the back.


We came up with this dish when the parental units brought home enough squash and pumpkin to feed Iceland. They were EVERYWHERE in the garage, something had to be done! It's a warm, fantastic winter soup. I also tried to stick with similar colored vegetables/spices, to keep the squash's bright orange color.
Summer squashes are some of the most versatile vegetables, and they last forever. We keep ours in a colder place in the basement, and grab one whenever we want an easy meal.
Squashes come in an abundance of variations, including butternut, acorn, spaghetti, banana, and turban. The difference between a summer and winter squash are the season they are grown in. Summer squashes are actually the ones served during the winter, since they are grown in the summer months.
They aren't limited to blending either. Squash make a fantastic side dish by simply cubing them and baking with salt and butter. Or, if you're a little more motivated, you can grate one up and make a breakfast hash instead of using potatoes. Do you love pumpkin pie? Think about trading pumpkin for decadent butternut squash! The best part about doing so is you add minimal time to your recipe, but eliminate the canned pumpkin!
Using a sharp knife, take the skin off the butternut squash. You might be able to get away with using a vegetable peeler, but I'm not coordinated enough for that! Cut it into cubes. They don't have to be perfect, they're going to be blended up anyway. Chop the bell pepper into strips and get as many seeds out as you can. If you'd like your soup to have a more red color, add more red peppers instead of orange.
Now, add everything into the crockpot (including the turmeric and paprika). Make sure you mix it so the cream and wine are swirled together. Turn it on high for about four hours. When you can stab a fork through a squash chunk, it's done. Let the soup cool.
When you're blending the mixture, you might have to do it in separate batches. We had to do it twice. Be very careful when blending it, if it's very hot and there's no release for the air, it can burn you quite badly. If it's still hot when you blend, make sure you have a little opening on the lid!
Garnish with a little paprika, salt, and pepper! Enjoy!
Marjorie Gelso is a co-author of http://www.engineered-fitness.blogspot.com. She is a fitness coach and new recipe connoisseur. Their main goals are teaching portion control, fitness, and that yummy food can also be healthy!
If you enjoyed this recipe, check out the other many recipes at her blog!


Title says it all. I'm beginning to question the wisdom of the buying the 500 rds of WCC M855.
For general purpose combat use with 1/7 twist barrels from 0 to 600 yards, I would choose one of the combat proven 5.56 mm (ie. 5.56 mm NATO pressure loads, not .223 SAAMI pressure loads which run about 200 f/s slower) heavy match OTM loadings: either the Hornady 75 gr TAP (#8126N) using the OTM bullet w/cannelure or the equally good 77 gr Nosler OTM w/cannelure loaded by Black Hills, followed by the 77 gr Sierra Match King OTM-which, while exceedingly accurate, offers slightly reduced terminal effects. If your expected engagement scenario is at more typical LE distances, say out to 200 yards, then the .223 SAAMI pressure loads are fine. The experimental BH loaded 100 gr OTM exhibits impressive fragmentation, even at relatively low velocities, however, their trajectory is like a rainbow-definitely for use under 150 - 200 yards.
NOTE: For general purpose LE use, if stuck with 1/9 twist barrels, the heavy 70+ gr match OTM loads are not universally accurate in all rifles and the 69 gr SMK OTM, the 68 gr Hornady OTM, the Winchester 64 gr JSP (RA223R2), or one of the new Federal 64 gr TRU (223L) JSP, Hornady 60 gr JSP, or Nosler 60 gr Partition JSP's are the best choices to most likely run accurately in the majority of 1/9 twist rifles. You are screwed with 1/12 twists, I would probably choose the 55 gr Federal bonded JSP load (Tactical--LE223T1 or identical Premium Rifle--P223T2) in order to ensure adequate penetration.
If routinely engaging vehicles, the only LE .223 loads which effectively penetrate automobiles are the 62 gr Federal bonded JSP Tactical (LE223T3) and the similarly performing 55 gr Federal bonded JSP load. While not bad choices, neither the new Hornady 60 gr "barrier penetration" JSP nor the 60 gr Nosler Partition JSP bullets were quite as effective as the proven Trophy Bonded Bear Claws against glass in our testing. None of the OTM bullets, even the heavy 75 - 100 gr loads, offer good performance through automobile glass. FWIW, contrary to what many believe, 62 gr M855 FMJ also is not very good against glass. For military use, the M995 AP is the best choice for vehicles and glass.
If a short barreled 5.56 mm weapon, such as the Colt Commando, LMT/Crane Mk18 CQBR, HK416, HK 53, HK G36C, etc… is used with a 1/7 twist barrel, the 75 gr Hornady OTM, 77 gr Nosler OTM, 77 gr SMK OTM, and 100 gr BH OTM loadings offer acceptable performance, as do the LE Fed 55 or 62 gr Tac bonded JSP's and the 60 gr Nosler Partition JSP bullet; for LE with a 1/9 twist, stick with the Fed 55 or 62 gr Tac bonded JSP's or the 60 gr Nosler Partition JSP bullet. Remember, with barrels under 14.5", the effective engagement distance is significantly reduced compared to the longer barreled carbines.
Whatever projectile is used, it is best with a cannelure to prevent bullet set-back in semi-auto/auto weapons. Also, be cautious with the exposed lead on the JSP designs. Often they will run great for up to 200-300 rounds, but then mysterious feeding failures will begin as a result of lead build-up on the feed ramps. I have personally seen this occur with a variety of JSP's including 55 gr, 60 gr, and 64 gr in a recent LE training course. As soon as FMJ or OTM was substituted, all the feeding failures ceased.
Be sure to watch your ammo storage conditions. Temperatures above 150 deg F will degrade the powder and cause pressure spikes. Hint: Think locked metal conex containers in the mid-east, car trunks in the southern U.S., and storage areas near heaters in the northern U.S.
Most LE agencies around here use the Hornady 75 gr TAP OTM, Federal 55/62 gr bonded Tactical JSP, or Winchester 64 gr JSP (it is on the state contract and is VERY inexpensive)--all have worked very well in actual officer involved shootings. I carry the Hornady 75 gr OTM (SAAMI load) in 30 rd mags and a few 20 rd mags of Federal Tactical 62 gr JSP for barrier situations.
Do short barrel 5.56 mm carbines have some limitations? Yes, especially beyond 100 yards, but BFD…learn what they are, train, and drive on. For LE urban work with lots of entries and mounted work I use a 10.5" LMT CQB-R w/Aimpoint and Noveske KFH because, despite the ballistic compromise, for the mission it is the best choice. For GP/Patrol I carry a 16" with a 3.5x TA11 ACOG (the S&B 1.1-4x Short Dot would be an equally good or even better choice) -- pick the right tool for the job.
Mk262 using the 77 gr SMK OTM is built as premium quality ammunition intended for precise long-range semi-auto rifle shots from the Mk12. It is great for its intended purpose and in the military is the best currently readily available option to increase terminal performance with all 5.56 mm carbines. But Mk262 is NOT necessarily the best choice for LE or civilian self-defense purposes, or for that matter for most military combat use from carbines (Mk18, HK416, M4, FN Mk16 SCAR-L).
What is needed is a environmentally robust, thermally stable combat rifle round with improved terminal performance, yet without the need for the 600+ meter precision accuracy of Mk262 in the Mk12. Such a carbine combat load needs to have a crimped and sealed primer, sealed case mouth, cannelure, acceptable accuracy out to 300-400 meters coupled with good soft tissue terminal performance (early yaw, good fragmentation, at least 12 inches of penetration coupled with maximized tissue damage during the first 10 to 12 inches of travel in tissue. The new Hornady 75 gr milspec OTM (#8126N) loading or equivalent BH milspec 75 gr or Nosler 77 gr OTM loads are examples of this type of combat ammo. Note, the Hornady 75 gr OTM load has a proven combat record in use with certain U.S. SOF units for several years.
At this time, given the current ammo choices available via the military supply system, I prefer to load my mags with mainly Mk262Mod1 and if available, a couple of mags of M955 AP for barriers and some M856 tracer (or TB74 dim trace) for marking targets.
Is Mk262 Mod1 better than M855? Yes, by all means for general anti-personnel targets. However, the resulting "blowout" in the rear window is done by the fragmenting OTM's that have lost a significant amount of their weight due to the windshield. Resulting penetration into a subject behind that auto glass still isn't as great as the information suggests.
I firmly beleive that M855 should be phased out for Mk 262, is there anything that we civi's can do to help get this done. I know there isn't much we can do but if we were to at least write/call our senators I think it would be a help, especially if every senator is getting tons of emails from us about the subject.
A couple soldiers shooting a car in theatre for a "test" is completely, and utterly, meaningless.
I agree completely, they pop a windshield a couple of times, spend five minutes making a document in Microsoft Word, and act like this is gospel.
On windshields or human tissue?
On a kevlar helment at 500M?
Everything is open to specific discussion. One round is not "far superior" in all cases.
Pretty cool. Sounds like a desert version of the "Box o' Truth". Maybe call it the "Sandbox o' Truth"?
Much like the BOT. Anyway I wasn't being serious.
Our Special Operations force are the worst nightmare of America's worst enemies, and you're making us proud.
Industry standard auto glass tests are usually performed with the glass at a 45* angle (vertically) and the weapon is also offset 15* left or right (horizontally).
Does it make sense that from a standing position, you should aim at the lowest part of the windshield to increase the angle? That would be where center mass would be also...?
Are you saying M855 is better on glass than MK262? Regardless of the extent of this test?
Section1 Operations, I could be wrong, but I don't think they'll be "issuing" any TBBC as a general issue ammo. Yes it's better but that's not really the point. Notice doc said he'd take some MK262 and M955 and M856 tracers. He didn't say anything about M855.
I personally have no problem with M855. I think it would serve my defensive purposes. However, my purposes are a whole lot different than the US Military. I also think MK262 should be for general issue. I just don't know if that's going to happen.
God be with you. You ever get any MK262 over there? Do you think it's necessary?
Nope. I am saying I would have to see a well done scientific test completed, utilizing the proper variables and controls, and then repeated by someone else to make that definitive statement.
That's fine, but I think it's been done. tacticalforums might have somthing on it or Dr.Roberts himself. I think there is a reason that in his quote he would take Mk262 and M995 over M855. I don't know. I forget if I've seen the test or not but I thought I did. Either way, MK262 is most probably better for GP ammo, imho.
We could always say that we'd be happy to buy up all of the surplus M855 once it's phased out ... Provided of course they lift that stupid wasteful EO on selling surplus ammo to us commoners.
Everything is open to specific discussion but overall the MK 262 is a much better round. M855 was designed to shoot russians wearing body armor and in that roll it is a great round but for shooting someone who is wearing pajamas it just pokes a hole wear as the MK 262 will create massive tissue damage through fragmentation.
Mk262 may not beat M855 in every category but it almost does.
iirc, when shooting into a vehicle the bullet is deflected upward. opposite is true if you are shooting through the winshield from the inside. rear windows and side will shatter after the first shot unless they are laminated with tinting material.
The bullet went through the front of the windshield and out the back. The back window was not the first point of impact.
I hope someone gets these troops the proper info.
Logic would say a thin jacketed match bullet would not do well aginst hard cover.
Can somone post the scorce for this "test" and maybe get something back to these guys to let them know Mk262 is not going to be "best"?
This is all old news. The informal test prompted the Army into some major testing.....M855 was found equal to or better in the tests. results were communicated to RB & 1st cav.
In this case, old news is good news.
Please cite this report as i would love to read it. I have only heard things about M855 ripping out its penetrator and sheeding its jacket when punching through auto glass. This leads to significant deviation of the flight path of the bullet and reduced penetration and wounding of the target after the barrier. I was under the impression OTM bullets due to greater retained mass and momentum performed better by deviating less and penetrating further, causing greater wounds after auto glass penetration than M855.
I'm not sure what you're inferring from my post but simply put OTM's perform poorly against auto glass. Neither, M855 or Mk262 is ideal as Doc's post represents both a military/LE point in that M955 is a military only AP round up to the task of auto glass.
In the LE would, the TBBC would be the best selection even though the two i.e. M955 & TBBC are completely different designs.
And for both circles the Mk262 Mod1 should be a general issue anti-personnel round.
You are telling me to look at DevL's comments, yet you are contradicting him. At this point I don't have any proof until either the doc shows up and tells us the what for or someone finds a test taht I thought had been performed. But if you read his post it said that the heavier bullet retains mass better once going through, regardless of the thickness of the jacket. In so many words. I'm not really seeing YOUR point. But I do have a thick head sometimes, fwiw.
And for the record, my stance isn't that M855 is fatally flawed for GP, I'm just saying I think MK262 has proven to be better, including barrier / glass penetration. Not the best, just better.
Just ask yourselves this question. If I was in the Military and I was issued an M4, which ammo would I prefer to use as my all-purpose ammo? The M855 or the MK262? I for one would prefer the MK262, hands down. You just have to know what the ammo can and can't do. Just my $.02.
Are we reading the same posts?
Where do I contradict DevL? What isn't clear to you in my post/position?
Seems there's also an undiagnosed reading comprehension issue too beyond the thick head -- no?
***Edited to add that when I've typed M955 it should have been M995 – my error, I apologize for the incorrect designation.
Mk262 is an improvement, but only slight in a std. M4 which isn't able to make maximum use of it's improved accuracy/wound characteristics at extended ranges.
The report is not releasable at this time....don't think the higher ups want strenghts/weaknesses of the system made public. There certainly isn't anything M855 has to be embarrassed about. In fact it looks decent even compared to 7.62.
The NDIA website may have a mini-summary posted...but, I haven't checked.
Consider phasing out M855 (62 gr) and replacing it with Mk262 (77 gr.) ammunition.
The author is very optimistic.
Is it more optimistic than trying to switch to 6.8 SPC?
The informal test prompted the Army into some major testing.....M855 was found equal to or better in the tests. results were communicated to RB & 1st cav.
M855 and Mk262 are BOTH relatively poor performers against glass.
Mk262 is not the be all end all for carbine use, but it is currently the best readily available choice for the military--it would NOT be my first choice for LE or civ use. I would also not recommend Mk262 for general military issue, because that is NOT what it was designed for.
What is needed is a environmentally robust, thermally stable combat rifle round with improved terminal performance, yet without the need for the 600+ meter precision accuracy of Mk262 in the Mk12. Such a carbine combat load needs to have a crimped and sealed primer, sealed case mouth, cannelure, acceptable accuracy out to 300-400 meters coupled with good soft tissue terminal performance (early yaw, good fragmentation, at least 12 inches of penetration coupled with maximized tissue damage during the first 10 to 12 inches of travel in tissue. The new Hornady 75 gr milspec OTM (#8126N) loading or equivalent BH milspec 75 gr or Nosler 77 gr OTM loads are examples of this type of combat ammo. Note, the Hornady 75 gr OTM load has a proven combat record in use with certain U.S. SOF units for several years. Also note that an ideal combat load should be relatively blind to intermediate barriers, although at this time, no 5.56 mm loads can fully meet this goal.
At this time, given the current ammo choices available via the military supply system, I prefer to load my mags with mainly Mk262Mod1 and if available, a couple of mags of M995 AP for barriers and some M856 tracer (or TB74 dim trace) for marking targets.
Is it a typo in that it should be M995 AP or are you meaning M855?
Looking for information about M955 AP and M995 AP reveals a confusion of numbers that leads me to question the designators. Are people mucking the numbers and referring to the same round?
Typo, corrected above. Should read M995.
I bet some of the guys in our Battalion wouldnt necessarily agree. They capped one guy through the windshield and hit him in the ankle and in the chest, one time each. He died.
If the 10-8, Tactical Forums, and et al posts have the same typo it might be worth correcting.
Thanks for all of your work regarding terminal ballistics.
10-8 and TF don't appear to have a typo.
And what happened with the OTM bullet that led them to determine it was not better? Did I miss that part?
People get killed with .22lr all the time. That does not make it a better performing load for self defense.
The point is supposed to be that although M855 can get the job done its less than ideal. OTM rounds are also less than ideal but even though they have thin fragile jackets they have greater retained mass after passing through a barrier. They also are not good barrier rounds but perhaps a better choice than M855 for a general purpose round that is used on both open tagets and tagets in automobiles.
Bad idea. Mk262 is in no way suited to being a general issue/multi purpose cartridge like the M855 is. Most importantly, it lacks the vital penetration offered by M855. The SS109 bullet was designed to increase the effective range of 5.56 SAW's and to ensure penetration against Warsaw Pact helmets/body armor/chest rigs. Mk262 offers an exceptional level of accuracy and terminal effect against unarmored insurgents, but what about DPRK or Iranian soldiers who are armed/armored as well as we are? No bueno. Mk262 is an excellent stop-gap or "band aid" but its not a suitible replacement for M855 for a number of reasons, penetration being just one of them.
All is well then but it was worth checking because I assumed you probably cut and pasted one of your already written posts.
Which is NOT M855. My head might be thick but your post Section1_Operations seem to be alluding that OTM bullets are somehow worse than M855 for the application under discussion, glass penetration. Although it seems we have a case of picking the best of the worst for that application, yet he still recommended an OTM.
Edited to add: Section1_Operations. I see that the thrust of your point was that neither are good for glass / barrier penetration. I understand that. I guess the rest of us were debating which one is better. The premise being they have to use something, so why not choose the best of what they presently have.
There was no alluding to Mk262 being worse than M855. DevL's post explains how heavier OTM's can perform okay; but, whether it's better, worse, or a trade off in comparison to M855 is a toss up.
The best academic guess is that a heavier OTM slightly edges M855 only in fragmentation and retained weight.
You're looking at a (1) round solution whereas DocGKR's post as well as mine indicates that it is a (2) round solution given current system ammo i.e. a Mk262 type loading & a M995 AP loading. The added problem is that they have a large supply of M855, smaller supply of Mk262 type loads, and a limited to nonexistent supply of M995 AP.
Given current logistics and the ability of soldiers to consistently maintain it their best solution may be a combo of both Mk262 & M855 in their magazines.
War is hell on the best laid plans and the issues we're discussing are decided well above any of our pay grades.
Is Mk262 Mod1 better than M855? Yes, by all means for general anti-personnel targets.
I'm probably just reading into this wrong, but this seem to imply that you thought MK262 was better ONLY for Anti-Personelle. Whereas, DevL and I had both stated that we believed it had an edge over M855 for glass penetration due to better retained mass, IE; heavier bullet. Which is why we keep concluding that MK262 would be better overall, and there then wouldn't really be a need to load MK262 and M855 as you are suggesting.
Either way, I've always been an M855 apologist for the most part. I believe it's proven to work. However, my stance is still that MK262 has the edge in all areas. If it is the case that people can't get it than fine, M855 is just dandy. KevinB just claimed he got a KIA with a 10.5" barrel at 400 yards with it.


INTRO: TIMORESE NOBEL PEACE LAUREATE JOSE RAMOS-HORTA SAYS THE END OF INDONESIAN PRESIDENT SUHARTO'S RULE MEANS THAT EAST TIMOR NOW HAS A REAL CHANCE FOR A BETTER FUTURE. V-O-A'S SUZANNA ANDERSON SPOKE WITH MR. HORTA AT A GATHERING OF NOBEL LAUREATES IN CHARLOTTSVILLE, VIRGINIA.
TEXT: JOSE RAMOS-HORTA SAYS THE WORLD HAS A GOLDEN OPPORTUNITY NOW TO RESOLVE THE EAST TIMOR CONFLICT, WHICH HAS DRAGGED ON FOR 23 YEARS. HE SAYS THIS RENEWED HOPE DOES NOT LIE IN THE HABIBIE GOVERNMENT -- BUT IN THOSE INDONESIANS WHO ARE SEEKING DEMOCRACY.
UNFORTUNATELY, HABIBIE IS PART OF THE SUHARTO LEGACY. HE IS WHERE HE IS BECAUSE OF SUHARTO'S APPOINTMENT OF HIM AS VICE PRESIDENT -- BECAUSE OF THAT CLOSE RELATIONSHIP THAT GOES BACK ALL THEIR LIVES. BUT ON THE OTHER HAND, I BELIEVE THAT THE DEMOCRATIC MOVEMENT, THAT THE DEMOCRATIC PROCESS, IS IRREVERSIBLE BECAUSE THAT'S WHAT THE PEOPLE ARE DEMANDING.
MR. HORTA SAYS THAT NEW POLITICAL LEADERS EMERGING IN INDONESIA SUPPORT THE U-N PLAN FOR AUTONOMY AND THE CALL BY TIMORESE LEADERS FOR A REFERENDUM ON EAST TIMOR'S FUTURE.
HOWEVER, HE SAYS THAT MANY FACTIONS IN THE INDONESIAN MILITARY CONTINUE TO BELIEVE THAT FORCE IS THE ONLY WAY TO RESOLVE THE CONFLICT -- WHICH BEGAN WHEN INDONESIA ENTERED THE COUNTRY IN 1975 AND ANNEXED IT A YEAR LATER.
THE NOBEL LAUREATE SAYS THERE IS PROOF THAT THE INDONESIAN ARMED FORCES, KNOWN AS ABRI (AHB-BREE), HAS FAILED TO LIVE UP TO ITS PROMISE TO PULL OUT THOUSANDS OF TROOPS FROM EAST TIMOR.
THERE IS ABUNDANT DOCUMENTATION THAT INDONESIA HAS 20-THOUSAND TROOPS IN EAST TIMOR -- NOT THE FOUR OR SIX THOUSAND THEY CLAIM. ANYWAY WHO IN THIS DAY IS GOING TO TRUST ABRI'S WORD. THEY LIE AND LIE AND LIE FOR 32 YEARS -- PROTECTING SUHARTO.
INDONESIA DENIED THIS WEEK THAT IT HAD SENT NEW TROOPS INTO TIMOR AFTER ONE-THOUSAND SOLDIERS WERE WITHDRAWN EARLIER THIS YEAR.
HOWEVER, MR. HORTA DOES NOT PUT ALL THE BLAME ON INDONESIA FOR THE SITUATION IN THE FORMER PORTUGUESE COLONY. AT THE NOBEL LAUREATES CONFERENCE, HE SAID THAT EVERY MAJOR COUNTRY IN THE WORLD PROVIDED WEAPONS TO INDONESIA, WHICH ENABLED JAKARTA TO HOLD ON TO TIMOR FOR SO LONG.
HE SAID MANY INDONESIANS ARE NOW ASKING HOW THE SITUATION IN TIMOR COULD HAVE HAPPENED AND QUESTIONING THE LOSS OF LIFE THAT IS THE RESULT OF 23 YEARS OF CONFLICT.
WHO IS GOING TO EXPLAIN TO THE INDONESIAN PEOPLE THE LOSS OF THEIR OWN PEOPLE? THOUSANDS OF INDONESIAN SOLDIERS LOST THEIR LIVES IN THE FIELD IN EAST TIMOR. WHO IS GOING TO EXPLAIN TO THE INDONESIAN PEOPLE THAT HUNDREDS OF MILLIONS OF DOLLARS WAS WASTED IN WEAPONS PURCHASES INSTEAD OF CHANNELING THEM TO EDUCATION, HEALTH CARE, CLEAN WATER AND HOUSING FOR THEIR OWN PEOPLE?


text:
Scorpions vocalist sings for Moscow Hospice patient
On Oct. 22, Scorpions vocalist Klaus Meine paid a phone call to Alexei Anichkin — a patient at First Moscow Hospice who had long dreamt of going to one of the legendary band's concerts. Meine personally played the song "Holiday" for Anichkin.
Klaus Meine played his song "Holiday" for the Russian patient at Moscow Hospice. Source: DPA / Vostok Photo
According to the "Faith" website established in support of hospices, the German singer and the Russian patient communicated through interpreters. Meine told Anichkin he was very pleased the group is remembered and loved in Russia, and that he was upset he could not invite him to the Scorpions concert at Moscow's Crocus City Hall.
"Alexei has cancer; he does not get up, and even breathing is hard for him. His unrealizable dream became a reality in less than a day: Five thousand people had the children's funds manager Lida Moniava's letters of request reposted. They got everyone involved, even those who are remotely connected with the group's concert in Moscow," states the website.
Read more: Russian photographer fights for young cancer patients
When Meine sang "Holiday" into the phone, all 20 people present during the conversation were crying. Anichkin tried to sing along, but he did not have enough oxygen.
"Alexei is just so happy; he says that it is all incredible, incredible that the Scorpions sang for him alone. Incredible, that five thousand people tried to fulfill his dream in one night," wrote Moniava.
The 29-year-old Alexei Anichkin has been a patient at the First Moscow Hospice for more than a month. Before the onset of his disease, Anichkin graduated from St. Tikhon Humanitarian University and worked as a history teacher at a boarding school for orphans. The hospice has a tradition, according to which they try to fulfill their patients' wishes. Alexei's dream was to meet the Scorpions.
First published in Russian in NewsRu.com.
Music in Russia medicine cancer News


Our body is an active system that is working even when we are sleeping. The active metabolism of our body leads to the production of many by-products. These by-products, if allowed to accumulate in the body will harm our body. These are toxic to the body if present in bulk inside the body. The toxic substances are excreted in the form of oil by our skin.
There are various ways to get rid of oily skin. Let us dig into some of these ways.
Getting rid of the excessive skin is best done by cleaning the skin with a good exfoliating agent. If it is winter season and you still have oily skin, you can find a solution in an orange. The orange peel acts as a perfect scrubber. It cleans dirt from your skin and removes the excess oil from the pores of the skin. It helps the skin to breathe and stay healthy.
Lemon being a citrus fruit is rich in vitamins. It is one of the best sources of vitamin C. Vitamin C is antioxidant. It captures all the free radicals produced by the body. Lemon juice also helps to remove tan along with excess oil from the skin. Lemon being high in acid content acts as a good bleaching agent. It helps the skin to retain its natural color and texture.
We are sure you've been told to drink water regularly in a day. Our skin might release oil in excess when the body is not fit. One of the signs of an unfit body is excessive oil production leading to skin rashes and acne. To prevent a large section of skin troubles, one needs to increase the fluid intake. Two liters of water in a day is must for an adult. And don't sip in the carbonated drinks. Enrich yourself with fruit juices like watermelon juice, pomegranate juice both of which are rich in vitamins.
Aloe vera is one of those plants that are made for solving all your health troubles. Aloe vera gel has a soothing effect on the skin. It also has properties of removing the excess oil on the skin surface. It nourishes skin from the inside and helps it to remain young and glowing.
A mask of egg white acts as a good home remedy to clean the skin and thus get rid of oil.
This entry was posted in Skin Care and tagged Get Rid of Excessive Skin Oil, Skin, Skin Care, Skin Oil on July 12, 2015 by OROGOLD Day Moisturizer.