text:
/*
 kbaseVisWidget
 */

define(
    [
        'jquery',
        'd3',
        'kb_vis_rectangle',
        'kb_vis_point',
        'kb_vis_size',
        'kb.jquery.widget'
    ],
    function ($, d3, Rectangle, Point, Size) {

        'use strict';

        $.KBWidget({
            name: "kbaseVisWidget",
            version: "1.0.0",
            options: {
                xGutter: 20,
                xPadding: 30,
                yGutter: 20,
                yPadding: 30,
                yLabels: true,
                xLabels: true,
                xScaleType: 'linear',
                yScaleType: 'linear',
                useIDMapping: false,
                bgColor: 'white',
                scaleXAxis: false,
                scaleYAxis: false,
                scaleAxes: false,
                useUniqueID: false,
                transitionTime: 1750,
                ticker: 0,
                radialGradientStopColor: 'black',
                linearGradientStopColor: 'black',
                defaultDataset: function () {
                    return [];
                },
                width: '100%',
                height: '100%',
                customRegions: {}
            },
            shouldScaleAxis: function (axis) {
                if (this.options.scaleAxes) {
                    return true;
                } else if (axis === 'x' && this.options.scaleXAxis) {
                    return true;
                } else if (axis === 'y' && this.options.scaleYAxis) {
                    return true;
                } else {
                    return false;
                }
            },
            _accessors: [
                'xGutter',
                'xPadding',
                'yGutter',
                'yPadding',
                'width',
                'height',
                {name: 'dataset', setter: 'setDataset'},
                {name: 'input', setter: 'setInput'},
                {name: 'xLabel', setter: 'setXLabel'},
                {name: 'yLabel', setter: 'setYLabel'},
                {name: 'xScale', setter: 'setXScale'},
                {name: 'yScale', setter: 'setYScale'},
                'xScaleType',
                'yScaleType',
                'yHeightScaleType',
                'xIDMap',
                'yIDMap',
                'radialGradients',
                'linearGradients',
                'children',
            ],
            input: function () {
                return this.dataset();
            },
            setInput: function (newInput) {

                if ($.isPlainObject(newInput) && newInput.dataset != undefined) {
                    return this.setValuesForKeys(newInput);
                } else {
                    return this.setDataset(newInput);
                }

            },
            setXLabel: function (newXLabel) {
                this.setValueForKey('xLabel', newXLabel);
                this.render('xLabel');
            },
            setYLabel: function (newYLabel) {
                this.setValueForKey('yLabel', newYLabel);
                this.render('yLabel');
            },
            setXScale: function (newXScale) {
                this.setValueForKey('xScale', newXScale);
                this.render('xAxis');
            },
            setYScale: function (newYScale) {
                this.setValueForKey('yScale', newYScale);
                this.render('yAxis');
            },
            createIDMapForDomain: function (domain) {
                var map = {};
                $.each(
                    domain,
                    function (idx, val) {
                        map[idx] = val;
                    }
                );
                return map;
            },
            setXScaleDomain: function (domain, scaleType) {
                var xScale = this.xScale();

                if (xScale == undefined) {
                    if (scaleType == undefined) {
                        scaleType = this.xScaleType() || this.options.xScaleType;
                    }

                    xScale = d3.scale[scaleType]();

                    this.setXScaleRange([0, this.chartBounds().size.width], xScale);
                    this.setValueForKey('xScale', xScale);
                }

                xScale.domain(domain);

                if (this.options.useIDMapping && this.xIDMap() == undefined) {
                    this.xIDMap(this.createIDMapForDomain(domain));
                }

                this.render('xAxis');

                return xScale;
            },
            setXScaleRange: function (range, xScale) {
                if (xScale == undefined) {
                    xScale = this.xScale();
                }
                xScale.range(range);

                return xScale;
            },
            setYScaleDomain: function (domain, scaleType) {
                var yScale = this.yScale();

                if (yScale === undefined) {
                    if (scaleType === undefined) {
                        scaleType = this.yScaleType() || this.options.yScaleType;
                    }
                    yScale = d3.scale[scaleType]();

                    this.setYScaleRange([0, this.chartBounds().size.height], yScale);
                    this.setValueForKey('yScale', yScale);
                }

                yScale.domain(domain);

                if (this.options.useIDMapping && this.yIDMap() === undefined) {
                    this.yIDMap(this.createIDMapForDomain(domain));
                }

                this.render('yAxis');

                return yScale;
            },
            setYScaleRange: function (range, yScale) {
                if (yScale === undefined) {
                    yScale = this.yScale();
                }
                yScale.range(range);

                return yScale;
            },
            init: function (options) {

                this._super(options);

                if (this.children() === undefined) {
                    this.children([]);
                }

                if (this.options.transformations === undefined) {
                    this.options.transformations = {};
                }

                if (this.radialGradients() === undefined) {
                    this.radialGradients({});
                }

                if (this.linearGradients() === undefined) {
                    this.linearGradients({});
                }

                if (this.options.chartID === undefined) {
                    this.options.chartID = this.uuid();
                }

                this.ticker = function () {
                    return ++this.options.ticker;
                }

                this.uniqueID = $.proxy(function (d) {
                    if (d.id === undefined) {
                        d.id = this.ticker();
                    }
                    return d.id;
                }, this);

                if (this.options.width !== undefined && this.options.width.match(/px/)) {
                    this.width(parseInt(this.options.width));
                } else {
                    this.width(this.$elem.width());
                }

                if (this.options.height !== undefined && this.options.height.match(/px/)) {
                    this.height(parseInt(this.options.height));
                } else {
                    this.height(this.$elem.height());
                }

                this.appendUI(this.$elem);

                if (this.xScale()) {
                    this.setXScaleRange([0, this.chartBounds().size.width], this.xScale());
                }
                if (this.yScale()) {
                    this.setYScaleRange([0, this.chartBounds().size.height], this.yScale());
                }

                this.callAfterInit(
                    $.proxy(function () {
                        this.render();
                    }, this)
                    );

                return this;

            },
            render: function (field) {

                if (!this._init) {
                    return;
                }

                if (field === undefined || field === 'chart') {
                    this.renderChart();
                }

                if (field === undefined || field === 'xAxis') {
                    this.renderXAxis();
                }

                if (field === undefined || field === 'yAxis') {
                    this.renderYAxis();
                }

                if (field === undefined || field === 'xLabel') {
                    this.renderXLabel();
                }

                if (field === undefined || field === 'yLabel') {
                    this.renderYLabel();
                }

                if (field === undefined || field === 'ulCorner') {
                    this.renderULCorner();
                }

            },
            renderULCorner: function () {

                var ulBounds = this.ULBounds();

                var imgSize = new Size(
                    ulBounds.size.width,
                    ulBounds.size.height
                    );

                var inset = 5;

                imgSize.width -= inset;
                imgSize.height -= inset;

                if (imgSize.width > imgSize.height) {
                    imgSize.width = imgSize.height;
                } else if (imgSize.height > imgSize.width) {
                    imgSize.height = imgSize.width;
                }

                if (imgSize.width < 25) {
                    return;
                }

                var ulDataset = [this.options.ulIcon];

                if (this.options.ulIcon) {
                    var ulLabel = this.D3svg().select(this.region('UL')).selectAll('.ULLabel');

                    ulLabel
                        .data(ulDataset)
                        .enter()
                        .append('image')
                        .attr('x', inset / 2)
                        .attr('y', inset / 2)
                        .attr('width', imgSize.width)
                        .attr('height', imgSize.height)
                        .attr('xlink:href', function (d) {
                            return d
                        })
                }
            },
            setDataset: function (newDataset) {

                if (newDataset == undefined) {
                    newDataset = this.options.defaultDataset();
                }
                ;

                this.setValueForKey('dataset', newDataset);

                if (this.shouldScaleAxis('x')) {
                    this.setXScaleDomain(this.defaultXDomain());
                }

                if (this.shouldScaleAxis('y')) {
                    this.setYScaleDomain(this.defaultYDomain());
                }

                this.render();
            },
            setDatasets: function (newDatasets) {

                if (newDatasets === undefined) {
                    newDatasets = [];
                }

                if (this.children() === undefined) {
                    this.children([]);
                }

                //first, peel off our dataset
                var myDataset = newDatasets.shift();

                var $me = this;

                //the remaining children are datasets of this vis.
                var initKids = function () {

                    $me.setDataset(myDataset);

                    for (var i = 0; i < newDatasets.length; i++) {
                        var child;

                        if (i < $me.children().length) {
                            child = $me.children()[i];
                            child.reenter(i, newDatasets[i], $me);
                        } else {
                            var childOptions = $me.childOptions($me.children().length, newDatasets[i]);
                            childOptions.parent = $me;
                            child = $.jqElem('div')[$me.name](childOptions);
                            $me.children().push(child);
                        }

                        child.setDataset(newDatasets[i]);
                    }

                    for (var i = newDatasets.length; i < $me.children().length; i++) {
                        $me.children()[i].setDataset(undefined);
                    }

                    $me.render();
                };

                this.callAfterInit(initKids);

            },
            reenter: function (idx, dataset, $parent) {},
            childOptions: function (idx, dataset) {
                return $.extend(true, {}, dataset.options || this.options.childOptions || this.options);
            },
            defaultXDomain: function () {
                return [0, 100];
            },
            defaultYDomain: function () {
                return [0, 100];
            },
            renderXLabel: function () {
                var yGutterBounds = this.yGutterBounds();

                var xLabeldataset = [this.xLabel()];

                var xLabel = this.D3svg().select(this.region('yGutter')).selectAll('.xLabel');
                xLabel
                    .data(xLabeldataset)
                    .text(this.xLabel())
                    .enter()
                    .append('text')
                    .attr('class', 'xLabel')
                    .attr('x', yGutterBounds.size.width / 2)
                    .attr('y', yGutterBounds.size.height / 2 + 3)
                    .attr('text-anchor', 'middle')
                    .attr('font-size', '11px')
                    .attr('font-family', 'sans-serif')
                    .attr('fill', 'black')
                    .text(this.xLabel());
                ;

            },
            renderYLabel: function () {

                var xGutterBounds = this.xGutterBounds();

                var yLabeldataset = [this.yLabel()];

                var xLabel = this.D3svg().select(this.region('xGutter')).selectAll('.yLabel');
                xLabel
                    .data(yLabeldataset)
                    .text(this.yLabel())
                    .enter()
                    .append('text')
                    .attr('class', 'yLabel')
                    .attr('x', xGutterBounds.size.width / 2)
                    .attr('y', xGutterBounds.size.height / 2 + 3)
                    .attr('text-anchor', 'middle')
                    .attr('font-size', '11px')
                    .attr('font-family', 'sans-serif')
                    .attr('fill', 'black')
                    .attr('transform', 'rotate(90,'
                        + (xGutterBounds.size.width / 2 - 7)
                        + ','
                        + xGutterBounds.size.height / 2
                        + ')')
                    .text(this.yLabel());
                ;

            },
            xTickValues: function () {
                return;
            },
            xTickLabel: function (val) {
                return val;
            },
            renderXAxis: function () {

                var $self = this;

                if (this.xScale() === undefined || this.xScale().domain === undefined) {
                    return;
                }

                var xAxis =
                    d3.svg.axis()
                    .scale(this.xScale())
                    .orient('bottom');

                var ticks = this.xTickValues();

                if (ticks !== undefined) {
                    xAxis
                        .tickValues(ticks)
                        .tickSubdivide(0)
                        .tickFormat(function (d) {
                            return $self.xTickLabel.call($self, d);
                        })
                        ;
                }

                if (!this.options.xLabels) {
                    xAxis.tickFormat('');
                }

                var gxAxis = this.D3svg().select(this.region('yPadding')).select('.xAxis');

                if (gxAxis[0][0] === undefined) {
                    gxAxis = this.D3svg().select(this.region('yPadding'))
                        .append('g')
                        .attr('class', 'xAxis axis');
                }

                gxAxis.transition().call(xAxis);

            },
            svg2HTML: function () {
                var $container = $.jqElem('div')
                    .append(this.data('$svg'));

                return $container.html();
            },
            renderYAxis: function () {

                if (this.yScale() == undefined) {
                    return;
                }

                var yAxis =
                    d3.svg.axis()
                    .scale(this.yScale())
                    .orient('left');

                if (!this.options.yLabels) {
                    yAxis.tickFormat('');
                }

                var gyAxis = this.D3svg().select(this.region('xPadding')).select('.yAxis');

                if (gyAxis[0][0] === undefined) {
                    gyAxis = this.D3svg().select(this.region('xPadding'))
                        .append('g')
                        .attr('class', 'yAxis axis')
                        .attr("transform", "translate(" + this.xPaddingBounds().size.width + ",0)")
                }

                gyAxis.transition().call(yAxis);
            },
            renderChart: function () {

            },
            setGutter: function (newGutter) {
                this.xGutter(newGutter);
                this.yGutter(newGutter);
            },
            setPadding: function (newPadding) {
                this.xPadding(newPadding);
                this.yPadding(newPadding);
            },
            /*
             +------------------------+
             | UL|   yGutter      |UR |
             +------------------------+
             | X |   chart        | X |
             | P |                | G |
             +------------------------+
             | LL|   yPadding     |LR |
             +------------------------+
             */

            appendUI: function ($elem) {

                var D3svg;

                if (!this.options.parent) {
                    $elem.append(
                        $.jqElem('style')
                        .html('.axis path, .axis line { fill : none; stroke : black; shape-rendering : crispEdges;} .axis text \
                            {font-family : sans-serif; font-size : 11px}')
                        );

                    D3svg = d3.select($elem.get(0))
                        .append('svg')
                        .attr('style', 'width : ' + this.options.width + '; height : ' + this.options.height);
                    //.attr('viewBox', '0 0 1600 1600')
                    //.attr('preserveAspectRatio', 'mMidYMid mMidYMid')
                    //.attr('width', 1600)
                    //.attr('height', 1600)
                    //.attr('width', this.width())
                    //.attr('height', this.height())
                    //.attr('style', this.options.debug ? 'border : 1px solid blue' : undefined);
                    //.attr('style', 'width : 100%; height : 100%')

                    d3.select('body').selectAll('.visToolTip')
                        .data([0])
                        .enter()
                        .append('div')
                        .attr('class', 'visToolTip')
                        .style(
                            {
                                position: 'absolute',
                                'max-width': '300px',
                                height: 'auto',
                                padding: '10px',
                                'background-color': 'white',
                                '-webkit-border-radius': '10px',
                                '-moz-border-radius': '10px',
                                'border-radius': '10px',
                                '-webkit-box-shadow': '4px 4px 10px rgba(0, 0, 0, 0.4)',
                                '-moz-box-shadow': '4px 4px 10px rgba(0, 0, 0, 0.4)',
                                'box-shadow': '4px 4px 10px rgba(0, 0, 0, 0.4)',
                                'pointer-events': 'none',
                                'display': 'none',
                                'font-family': 'sans-serif',
                                'font-size': '12px',
                                'line-height': '20px',
                            }
                        )
                        ;

                    this.data('D3svg', D3svg);
                }

                //XXX D3svg is pointing to a reference to the parent's D3svg, but that might not yet exist. Which means that I need to rewire  everything
                //to use a goddamn method instead.

                else {
                    this.$elem = this.options.parent.$elem;
                    this.width(this.$elem.width());
                    this.height(this.$elem.height());
                    D3svg = this.D3svg();
                }

                var regions = [
                    'chart', //add the chart first, because we want it to be at the lowest level.
                    'UL', 'UR', 'LL', 'LR', //corners are low priority
                    'yGutter', 'xGutter', 'yPadding', 'xPadding'   //labels win
                ];

                //used when debug is on.
                var colors = [
                    'red', 'green', 'blue',
                    'cyan', 'magenta', 'yellow',
                    'purple', 'orange', 'gray'
                ];

                D3svg.selectAll('defs').data([null]).enter().append('defs').attr('class', 'definitions');

                var $vis = this;

                var regionG = D3svg.selectAll('g')
                    .data(regions, function (d) {
                        return d;
                    })
                    .enter()
                    .append('g')
                    .attr('class', function (region) {
                        return region;
                    })
                    .attr('data-x', $.proxy(function (region) {
                        var bounds = this[region + 'Bounds']();
                        return bounds.origin.x;
                    }, this))
                    .attr('data-y', $.proxy(function (region) {
                        var bounds = this[region + 'Bounds']();
                        return bounds.origin.y;
                    }, this))
                    .attr('data-width', $.proxy(function (region) {
                        var bounds = this[region + 'Bounds']();
                        return bounds.size.width;
                    }, this))
                    .attr('data-height', $.proxy(function (region) {
                        var bounds = this[region + 'Bounds']();
                        return bounds.size.height;
                    }, this))
                    .attr('transform',
                        $.proxy(
                            function (region) {
                                var bounds = this[region + 'Bounds']();
                                return 'translate(' + bounds.origin.x + ',' + bounds.origin.y + ')';
                            }, this)
                        );

                regionG
                    .append('rect')
                    .attr('x', 0)
                    .attr('y', 0)
                    .attr('width', $.proxy(function (region) {
                        var bounds = this[region + 'Bounds']();
                        return bounds.size.width;
                    }, this))
                    .attr('height', $.proxy(function (region) {
                        var bounds = this[region + 'Bounds']();
                        return bounds.size.height;
                    }, this))
                    .attr('fill', function (d) {
                        return $vis.options.debug ? colors.shift() : $vis.options.bgColor;
                    })
                    .attr('class', 'background');

                $.each(
                    regions,
                    function (idx, region) {

                        D3svg.selectAll('.' + region).selectAll('g').data([{region: $vis.region(region, true), r: region}], function (d) {
                            return d.region;
                        })
                            .enter()
                            .append('g')
                            .attr('class', function (d) {
                                return d.region;
                            })
                            .attr('transform', function (d) {

                                var transform = $vis.options.transformations[d.r] || $vis.options.transformations.global;//{ translate : {x : 0, y : 0}, scale : {width : .1, height : 1} };
                                if (transform === undefined) {
                                    return;
                                }

                                transform = $.extend(true, {translate: {x: 0, y: 0}, scale: {width: 1, height: 1}}, transform);

                                return 'translate(' + transform.translate.x + ',' + transform.translate.y + ')'
                                    + ' scale(' + transform.scale.width + ',' + transform.scale.height + ')';
                            })
                    }
                );

                /*D3svg.selectAll('g').data(regions).selectAll('g')
                 .data( regions.map( function(region) { return $vis.region(region, true) } ) )
                 .enter()
                 .append('g')
                 .attr('class', function(region) { return region } );

                 ;*/

            },
            D3svg: function () {
                if (this.options.parent) {
                    return this.options.parent.D3svg();
                } else {
                    return this.data('D3svg');
                }
            },
            region: function (region, asName) {

                var dot = '';

                if (!asName) {
                    dot = '.';
                }

                if (this.options.customRegions[region] !== undefined) {
                    return dot + this.options.customRegions[region];
                }

                return dot + region + '-' + this.options.chartID;
            },
            ULBounds: function () {
                return new Rectangle(
                    new Point(0, 0),
                    new Size(this.xPadding(), this.yGutter())
                    );
            },
            URBounds: function () {
                return new Rectangle(
                    new Point(this.xPadding() + this.chartBounds().size.width, 0),
                    new Size(this.xGutter(), this.yGutter())
                    );
            },
            LLBounds: function () {
                return new Rectangle(
                    new Point(0, this.yGutter() + this.chartBounds().size.height),
                    new Size(this.xPadding(), this.yPadding())
                    );
            },
            LRBounds: function () {
                return new Rectangle(
                    new Point(this.xPadding() + this.chartBounds().size.width, this.yGutter() + this.chartBounds().size.height),
                    new Size(this.xPadding(), this.yPadding())
                    );
            },
            xPaddingBounds: function () {
                return new Rectangle(
                    new Point(0, this.yGutter()),
                    new Size(this.xPadding(), this.chartBounds().size.height)
                    );
            },
            xGutterBounds: function () {
                return new Rectangle(
                    new Point(this.xPadding() + this.chartBounds().size.width, this.yGutter()),
                    new Size(this.xGutter(), this.chartBounds().size.height)
                    );
            },
            yGutterBounds: function () {
                return new Rectangle(
                    new Point(this.xPadding(), 0),
                    new Size(this.chartBounds().size.width, this.yGutter())
                    );
            },
            yPaddingBounds: function () {
                return new Rectangle(
                    new Point(this.xPadding(), this.yGutter() + this.chartBounds().size.height),
                    new Size(this.chartBounds().size.width, this.yPadding())
                    );
            },
            chartBounds: function () {

                var widgetWidth = this.width();
                var widgetHeight = this.height();

                var chart = new Rectangle(
                    new Point(this.xPadding(), this.yGutter()),
                    new Size(
                        widgetWidth - this.xPadding() - this.xGutter(),
                        widgetHeight - this.yGutter() - this.yPadding()
                        )
                    );

                if (chart.size.width < 0) {
                    chart.size.width = 0;
                }

                if (chart.size.height < 0) {
                    chart.size.height = 0;
                }

                return chart;

            },
            showToolTip: function (args) {

                if (args.event === undefined) {
                    args.event = d3.event;
                }

                d3.selectAll('.visToolTip')
                    .style('display', 'block')
                    .html(args.label)
                    .style("left", (args.event.pageX + 10) + "px")
                    .style("top", (args.event.pageY - 10) + "px");
            },
            hideToolTip: function (args) {
                d3.selectAll('.visToolTip').style('display', 'none');
            },
            radialGradient: function (grad) {

                grad = $.extend(
                    true,
                    {
                        cx: 0,
                        cy: 0,
                        stopColor: this.options.radialGradientStopColor,
                        r: this.chartBounds().size.width / 2,
                    },
                    grad
                    );

                var gradKey = [grad.cx, grad.cy, grad.r, grad.startColor, grad.stopColor].join(',');

                /*$.each(
                 this.radialGradients(),
                 function (key, val) {
                 if (val == grad.id) {
                 return val;
                 }
                 }
                 );*/

                if (this.radialGradients()[gradKey] !== undefined && grad.id === undefined) {
                    grad.id = this.radialGradients()[gradKey];
                }

                if (grad.id === undefined) {
                    grad.id = this.uuid();
                }

                //I'd prefer to .select('.definitions').selectAll('radialGradient') and then just let
                //d3 figure out the one that appropriately maps to my given grad value...but I couldn't
                //get that to work for some inexplicable reason.
                var gradient = this.D3svg().select('.definitions').selectAll('#' + grad.id)
                    .data([grad]);

                var newGrad = false;

                gradient
                    .enter()
                    .append('radialGradient')
                    .attr('id',
                        /*
                         as brilliant as this hack is, it's also godawful. I might as well put a goto here.
                         this just returns the grad's id, as usual. BUT it also invokes a side effect to set
                         a global flag (well, enclosing context flag) to say that this is a newly created gradient
                         so down below we don't use any transition time to set the values. There's gotta be a better
                         way to do this, but I couldn't figure it out.
                         */
                            function (d) {
                                newGrad = true;
                                return d.id;
                            }
                        )
                            .attr('gradientUnits', 'userSpaceOnUse')
                            .attr('cx', function (d) {
                                return d.cx;
                            })
                            .attr('cy', function (d) {
                                return d.cy;
                            })
                            .attr('r', function (d) {
                                return 2.5 * d.r;
                            })
                            .attr('spreadMethod', 'pad')
                            ;

                        var transitionTime = newGrad
                            ? 0
                            : this.options.transitionTime;

                        var stop0 = gradient.selectAll('stop[offset="0%"]').data([grad]);
                        stop0.enter()
                            .append('stop')
                            .attr('offset', '0%');
                        stop0.transition().duration(transitionTime)
                            .attr('stop-color', function (d) {
                                return d.startColor;
                            });

                        var stop30 = gradient.selectAll('stop[offset="30%"]').data([grad]);
                        stop30.enter()
                            .append('stop')
                            .attr('offset', '30%')
                            .attr('stop-opacity', 1);
                        stop30.transition().duration(transitionTime)
                            .attr('stop-color', function (d) {
                                return d.startColor;
                            });

                        var stop70 = gradient.selectAll('stop[offset="70%"]').data([grad]);
                        stop70.enter()
                            .append('stop')
                            .attr('stop-opacity', 1)
                            .attr('offset', '70%');
                        stop70.transition().duration(transitionTime)
                            .attr('stop-color', function (d) {
                                return d.stopColor;
                            });

                        return this.radialGradients()[gradKey] = grad.id;

                    },
                linearGradient: function (grad) {

                    var chartBounds = this.chartBounds();

                    grad = $.extend(
                        true,
                        {
                            x1: 0, //chartBounds.origin.x,
                            x2: 0, //chartBounds.size.width,
                            y1: chartBounds.size.height, //chartBounds.origin.y,
                            y2: 0,
                            width: 0,
                            height: chartBounds.size.height,
                        },
                        grad
                        );

                    var gradKey = [grad.cx, grad.cy, grad.r, grad.startColor, grad.stopColor].join(',');

                    if (this.linearGradients()[gradKey] !== undefined && grad.id === undefined) {
                        grad.id = this.linearGradients()[gradKey];
                    }

                    if (grad.id === undefined) {
                        grad.id = this.uuid();
                    }

                    //I'd prefer to .select('.definitions').selectAll('linearGradient') and then just let
                    //d3 figure out the one that appropriately maps to my given grad value...but I couldn't
                    //get that to work for some inexplicable reason.
                    var gradient = this.D3svg().select('.definitions').selectAll('#' + grad.id)
                        .data([grad]);

                    var newGrad = false;

                    gradient
                        .enter()
                        .append('linearGradient')
                        .attr('id',
                            /*
                             as brilliant as this hack is, it's also godawful. I might as well put a goto here.
                             this just returns the grad's id, as usual. BUT it also invokes a side effect to set
                             a global flag (well, enclosing context flag) to say that this is a newly created gradient
                             so down below we don't use any transition time to set the values. There's gotta be a better
                             way to do this, but I couldn't figure it out.
                             */
                                function (d) {
                                    newGrad = true;
                                    return d.id;
                                }
                            )
                                .attr('gradientUnits', 'userSpaceOnUse')
                                .attr('x1', function (d) {
                                    return d.x1;
                                })
                                .attr('x2', function (d) {
                                    return d.x2;
                                })
                                .attr('y1', function (d) {
                                    return d.y1;
                                })
                                .attr('y2', function (d) {
                                    return d.y2;
                                })
                                .attr('spreadMethod', 'pad')
                                ;

                            var transitionTime = newGrad
                                ? 0
                                : this.options.transitionTime;

                            var gradStops = gradient.selectAll('stop').data(grad.colors);

                            gradStops
                                .enter()
                                .append('stop')
                                ;

                            gradStops
                                .transition().duration(transitionTime)
                                .attr('offset', function (d, i) {
                                    var num = 0;
                                    if (i === grad.colors.length - 1) {
                                        num = 1;
                                    } else if (i > 0) {
                                        num = i / (grad.colors.length - 1);
                                    }

                                    return (Math.round(10000 * num) / 100) + '%';
                                })
                                .attr('stop-color', function (d) {
                                    return d;
                                });

                            return this.linearGradients()[gradKey] = grad.id;

                        },
                    wrap: function (text, width, xCoord) {

                        if (xCoord === undefined) {
                            xCoord = function () {
                                return 0;
                            };
                        }
                        ;

                        text.each(function () {
                            var text = d3.select(this),
                                words = text.text().split(/\s+/).reverse(),
                                word,
                                line = [],
                                lineNumber = 0,
                                lineHeight = 1.1, // ems
                                y = text.attr("y"),
                                dy = parseFloat(text.attr("dy")) || 0,
                                tspan = text
                                .text(null)
                                .append("tspan")
                                .attr("x", xCoord)
                                .attr("y", y)
                                .attr("dy", dy + "em")
                                ;

                            while (word = words.pop()) {
                                line.push(word);
                                tspan.text(line.join(" "));
                                if (tspan.node().getComputedTextLength() > width) {
                                    line.pop();
                                    tspan.text(line.join(" "));
                                    line = [word];
                                    tspan = text.append("tspan")
                                        .attr("x", xCoord)
                                        .attr("y", y).
                                        attr("dy", lineHeight + 'em')//++lineNumber * lineHeight + dy + "em")
                                        .text(word)
                                        ;
                                }
                            }
                        });
                    },
                    absPos: function (obj) {

                        var box = obj.getBBox();
                        var matrix = obj.getScreenCTM();

                        return {x: box.x + matrix.e, y: box.y + matrix.f};
                    },
                    endall: function (transition, callback) {
                        var n = 0;
                        transition
                            .each(function () {
                                ++n;
                            })
                            .each("end", function () {
                                if (!--n)
                                    callback.apply(this, arguments);
                            });
                    },
                    uniqueness: function (uniqueFunc) {
                        if (uniqueFunc === undefined) {
                            uniqueFunc = this.uniqueID;
                        }

                        return this.options.useUniqueID
                            ? uniqueFunc
                            : undefined;
                    }
                });

        });

redpajama_set_name: RedPajamaGithub


text:
Mary McCoy / catalina island, Mary McCoy, Palos Verdes /	endurance contests, George Young /	0 comments
William Wrigley's Ocean Marathon
Palos Verdes Peninsula, CA
In 1919, the heavily insured William Wrigley Jr. bought a controlling interest in the Santa Catalina Island Co., and sought to promote his lovely little island getaway. And what better publicity stunt for the Roaring 20s than a contest of endurance? Yes, a winter swim from Catalina to Point Vicente would be just the thing for those flagpole-sitting, dance marathoning types.
Wrigley offered a prize of $25,000 to the first man to finish the January 15 channel swim, and $15,000 to the first woman.
The Wrigley Ocean Marathon attracted over 100 competitors, including a 17-year-old Canadian boy named George Young. Young held several Canadian swimming records, but was too poor to afford a ticket to Los Angeles. He did, however, have a friend with a motorcycle, and together they made the long haul from Toronto. The bike broke down in Arizona, where Young was picked up by a honeymooning couple, who drove him the rest of the way.
His perserverance paid off. Around 3am on January 16, after swimming for nearly 16 hours, Young was declared the winner of Wrigley's challenge. In fact, he was the only competitor to finish the race. With water temperatures hovering in the 50s, over 2/3 of the contestants dropped out after just a few hours.
Young caused a stir when he emerged from the surf in the nude. The modest Young said, "We put a covering of graphite over the grease before I put on my bathing suit to help keep out the cold… I had taken off my bathing suit when I was two and one half miles from Catalina, and I forgot that grease and graphite were my only covering as I rose out of the water."
Two women, Margaret Hauser of Long Beach and Martha Stager of Portland, OR, were awarded prize money, despite not completing the race. Only a mile from the finish line, Hauser was pulled from the water by her husband/trainer after 19 hours and 26 minutes, making her the contestant who lasted the longest. When Wrigley heard the news, he said, "Shucks! That's too bad. Give them each $2500 for their remarkable attempts."
Sadly, Young's career fell apart soon after the race. His manager turned down a $250,000 movie offer, believing he could get more money. But there weren't any other offers, and Young never again recaptured his glory he enjoyed as "The Catalina Kid."
Those interested in the endurance contests of the era may also enjoy Geoff Williams's new book, C.C. Pyle's Amazing Foot Race, which recounts the misadventures of the 199 men who ran from Los Angeles to New York City in 1928.

redpajama_set_name: RedPajamaCommonCrawl


Want it by Wednesday 24th April? Order within 4 hours, 39 minutes and choose Next Day Signed For (Special Delivery) at checkout.
Diamonfire Blue and Clear CZ Cluster Ring. A contemporary cluster ring featuring a blue CZ stone in the centre and a row of clear CZ stones around it. The clear stones are also set on the sides of the ring, with the shank split into two at the top.


The use of wireless LAN has reached mass adoption, so finding the techology in devices that help eliminate the number of wires connected to your home office is always a boon.
One look at the Lexmark X4550 all-in-one printer (£60 inc. VAT) and you'll know it's not been made for the mobile market. Weighing 5.8kg and measuring 286 x 453 x 533mm, this is a big, desktop machine. However, it comes with wireless LAN support in the form of an 802.11g chip built in and an antenna on the back of the design, so can be used by any Wi-Fi-enabled laptop.
Lexmark has taken a great deal of the pressure out of setting up the printer by supplying a CD-ROM that gives you a step-by-step guide. It also helps you set up the wireless side of the printer too. Aside from the standard disc for Windows, there is also a disc for Apple Macs, so any user can use this machine, which is a growing trend, but something that is seldom seen in the wireless space.
However, the problem we have with the software is that it insists on you connecting to a router and doesn't allow for ad hoc connections via a sole laptop. This is fine if you've already set up a network, but less so if you're a sole trader.
Assuming you have a network in place, setting up the all-in-one is simple and, once connected, the quality it provides is more than acceptable. The printer itself supports 15 pages a minute in standard monochrome and six in full colour, while the scanner can easily capture images up to 19200 x 19200 dpi in enhanced mode, while the standard scan is 600 x 1200 dpi, which is more than enough for most uses.
The Lexmark X4550 may not be the best printer on the market, nor the most compact all-in-one we've come across, but it does the job adequately and with minimum of wastage. We found it easy to set up and, as long as your needs are average and not high-end, you'll find this a great solution.


text:
Review - Gears 5: Hivebusters (XS)
by Lee Mehr, posted January 14th
Review - Twin Mirror (XOne)
by Lee Mehr, posted January 5th
Review - Call of the Sea (XS)
by Lee Mehr, posted December 31st
Review - When the Past was Around (XOne)
by Lee Mehr, posted December 30th
Atelier Ryza: Ever Darkness and the Secret Hideout (PS4) - Review
by Thomas Froehlicher , posted on 01 November 2019 / 3,254 Views
After two installments in the Atelier series already released in the first half of 2019, few would have bet on a third one this fall. Still, the hard-working developers at Gust have managed to deliver on time, leading to great success in Japan. Bolstered by the enthusiasm surrounding the developer's new illustrator, Toridamono, the development team has implemented many changes and innovative features for the latest entry in this unique RPG series which mixes battle and alchemy.
The prologue in Atelier Ryza displays a very bucolic universe. Ryza, Tao, and Lent are three teenagers with only one dream - to escape their boring everyday lives and explore the world beyond the lake in front of them. The three of them live on the island of Kuuken, a cloistered community that fears the outside world. One day, when they leave the island in secret, they quickly run into danger but end up being saved by a wandering alchemist called Empel. Viewing alchemy as a way to a new life, Ryza begs Empel to take her on as an apprentice.
Atelier connoisseurs will probably link that to Atelier Firis, but the comparisons end there. While Atelier Firis didn't push ahead with the narrative in order to focus on open world gameplay, Atelier Ryza hangs onto its island drama for hours, in an arguably overlong prologue. You'll spend at least 15 hours watching family arguments and childish squabbles between Ryza, her friends, their families, and the townspeople. I've been used to lighthearted narratives within the series, but this time it really felt like a bland evening drama. A lot of conversations aren't even dubbed in Japanese.
Luckily, the story takes on a new dimension in the second part of the game, which deals with more interesting subjects like the dark side of alchemy, in similar way as Atelier Ayesha did before it. While not being surprising, the scenario does adopt a more mature tone, with philosophical or ecological accents. That's also when Empel and his sidekick Lyla join the team, allowing the player to get rid of Tao and Lent, who are among the shallowest characters in the series' recent history. The game only features six playable characters, and there's no great wealth in terms of relationships or backstories. Much to my surprise the humoristic side of the series is completely gone as well.
I understand that the game wants to focus on the seriousness of the events that surround Ryza's world and its history, but comedy has always been a strong point in Atelier, so something feels missing here. Other traditions have been dropped in this entry as well; there's no alternative ending, and illustrations are astonishingly scarce. In short, the development team hasn't performed a miracle; Atelier Ryza comes only six months after the previous main game in the series, and it shows, with the content feeling much lighter than usual.
But Atelier Ryza is compelling in terms of gameplay. The alchemy system has been completely renewed to give players a fresh experience. Materials are poured into a sort of course, composed of lines and squares (small or large depending on the level of the item you want to make). Every square needs one type of material to be activated. While two or three lit squares are enough to make an item, the more squares you fill the better the quality of your output will be. Furthermore, each square has additional effects that greatly enhance your creations and will boost quality level, change the item type, improve character statistics, grant passive skills, and so on. It is a vast, engaging, and nearly inexhaustible system given the dozens of alchemy creations included and the meticulous optimization for each one of them.
Courses also contain other recipes, and a few others are found in books scattered about the island. However, most recipes are found while making other items, so there's a sense of exploring within the alchemy system in order to progress, which ends up being a lot more entertaining than just getting recipes from books.
On the top of revamping alchemy, Atelier Ryza introduces two great features: gems and Item Rebuild. Any item can be turned into a certain quantity of gems, which are later used to improve finished alchemical objects. The point of this innovation lies in that you can resume making an already finished object or piece of equipment and work on it until it's absolutely perfect. You resume the course where you left it and fill the remaining square, in exchange for gems (but you need enormous quantities of gems). Gems allow you to get rid of old and low quality items in your storage, creating a virtuous circle in terms of item management.
This has a massive impact on gear management, since Item Rebuild can easily upgrade weapons or armor from level 30 to level 50, for example. Players will have to hunt rare passive skills like jiyu no tamashii, which boosts healing and evasion. As has always been the case in the series, materials can bear rare traits holding powerful properties or passive skills, which can be transferred to alchemy items, including gear, later. When you assign an ingredient in a recipe, the item you make at the end can inherit the traits from the material and become more effective. Rare traits are found in the later stages of the adventure and Item Rebuild makes it easier to replace former traits or skills with more recent and effective ones. Traits are now ranked by rarity, which helps a lot when optimizing your gear. This allows the player to save a lot of time and tackle difficult challenges with better equipment.
Item Rebuild comes in particularly handy when refining armor and accessories, because stats-based properties now have a level. HP++ can for example go up to level 99, which boosts HP quite significantly. If a piece of armor already has HP++ level 10 and you rework it with material bearing HP++ level 6, the output will have HP++ level 16. That holds true for all statistics. By taking advantage of the vast array of recipes, you can build very high level gear quite quickly and be strong enough to keep up with the challenges.
In battles, Atelier Ryza innovates as well, and even introduces the biggest changes since the series has been available in the West. It's no longer a turn-based system; battles happen in real time, as time no longer stops when you choose your actions. Consequently, the player controls only one character, while the other two become AI allies. You can nevertheless change the leader anytime, which is very welcome. The battle menu has attack, skills, and item commands. Surprisingly enough, "attack" is the most important because hitting the attack button now triggers entire combos. Here, Gust inserts a new feature called "Tactics". The higher your Tactics level, the longer the combo will be when pushing the circle button. On top of that the available number of Action Points (AP) rises with your Tactics level. AP allows you to use attack skill, so reaching a high Tactics level is extremely beneficial. Tactics goes up automatically when you attack.
You have to wisely manage your strategy and the number of AP, since they're reset when your Tactics level goes up. For example, there's a maximum of 20 AP available in Tactics two. But once you hit Tactics level three, your AP stock goes back to zero in exchange for longer combos and a new maximum of 30 AP. You then just have to attack again to restock AP. You should always aim for maximum Tactics but you must also assess the right time to upgrade the Tactics level so as to avoid lacking AP when it's needed. Allies will often ask you to perform precise moves like using an item, an ice attack, healing, etc. Each time your character meets their demands, they'll perform an additional attack.
In virtually every battle, enemies charge a lethal blow that can one-hit KO your party. In such cases the R2 button allows you to call your allies to use their most powerful support skills in order to interrupt the foe. This has a huge AP cost and that's why careful planning of battles is necessary. All of this happens very quickly; you have only a few seconds to take decisions like which item to use, who to heal first, and so on. It's a giant leap forward in terms of dynamism, without hurting the strategic aspect of battles. The camera is more dynamic too, following the flow of action better by zooming from time to time.
The last important new aspect is Atelier Ryza's world. Here, again, the inspiration taken from Atelier Firis is obvious, but Atelier Ryza doesn't quite live up to its predecessor. The maps are larger than the ones in recent entries, but they definitely can't rival Firis's immense universe. But the bigger disappointment about Ryza's world is that it's not 'open' at all. Maps have to be explored in a set order (if you try a different exit, Ryza politely reminds you that "it's not that way"). In the end, the whole game is set along a fairly linear path, with next to no side events to unwind.
The interesting part about exploration is that you now bring with you several different tools to scavenge materials, with different tools having different uses. Among others, the hammer can extract sap from plants, the billhook cuts little vegetables or flowers, and the axe blows off the ore (surprisingly enough, axes do smash rocks). Those tools, like everything in Atelier, must be manufactured from scratch and their effectiveness highly depends on your alchemic skills. As always, the game rewards the smartest and most diligent players.
Exploration then only lies in the discoveries you can make along the way, such as when you come across beautiful natural sceneries or ancient monuments. Although certainly good to look at, Atelier Ryza's environments are nonetheless quite barren; ever identical creatures lurk around and there are only three major bosses in the whole game. That includes the final boss, and the first two are actually the exact same type of dragon, which is a letdown. Visually speaking, Atelier Ryza displays textures of far higher quality than two or three years ago. There's visible progress in things like buildings and greenery, but some characters like Klaudia show disappointing 3D models, suggesting the game hasn't been fully optimized for PS4. Battles, however, look stunning and are now among the most spectacular in the genre.
With its delightful novelties and visual improvements, Atelier Ryza would have been a must-have if only Gust had put more effort into its characters, story, and building a more interesting world in general. Alchemy is worth hours of joyful thinking and battles feel more exhilarating than ever before, but KoeiTecmo's game falls short in terms of overall content. The writing is once again underwhelming and the adventure itself holds too few surprises to amaze. Atelier simply needs longer development time if the developers intend to live up to the series' PS3 era.
Review based on a Japanese digital PS4 version of the game.
VGChartz Verdict
This review is based on a digital copy of Atelier Ryza for the PS4
Read more about our Review Methodology here
Sort by Highest Rated
Hardware Sales Drop as the Holiday Season Ends - Worldwide Hardware Estimates for Dec 27-Jan 2
Most Disappointing Game of 2020
PS5 vs Xbox Series X|S vs Switch Launch Sales Comparison Through Week 8
CD Projekt RED is an 'Acquisition Candidate' Following Cyberpunk 2077 Issues, Says DFC
Overall Game of the Year 2020
Nintendo Switch Best-Selling Console in the US in December, Cyberpunk 2077 Debuts in 2nd
Switch vs Wii Sales Comparison in Europe - Gap Drops Below 5M in November 2020
Switch vs PS4 vs Xbox One Global Lifetime Sales - December 2020
Most Anticipated Game of 2021
Pokemon Diamond and Pearl Remakes Coming to Switch This Year, According to Rumor


text:
Lype atnia är en nattsländeart som beskrevs av Malicky och Chantaramongkol 1993. Lype atnia ingår i släktet Lype och familjen tunnelnattsländor. Inga underarter finns listade i Catalogue of Life.

Källor

Tunnelnattsländor
atnia

redpajama_set_name: RedPajamaWikipedia


We realize you may have a few questions, like what type of portable toilet do I need or how much is this going to cost. Just give us a call and one of our specialists in Boyd, Texas will be happy to answer any questions you may have.
If you're looking to rent a portable toilet in Boyd, don't accept slow responding companies or late deliveries. For over 20 years we have delivered our portable toilets on-time, when and where our customers need them. Give us a call today to experience why we're the #1 affordable porta potty rental company nationwide.
Have questions, need a quote, or want to schedule a delivery – just give us a call at 877-826-7488 or come visit us at our Boyd location to view our available inventory.
Hints For Renting a Porta John by Boyd, Texas!
If you are hosting an outside event that calls for you to get a porta potty, you'll want to invest some time in researching the company you rent from to ensure that you've the full range of services you need. There are a large variety of porta potty options available for everyone and it is vitale to get a solid background on the factors that are involved in renting the right one. Below are just a few things to think about when choosing a vendor to rent your portajohn or portable toilet trailer from for your next occasion.
Even though it's usually the last thing someone thinks of when attending a special occasion, the restroom option is actually the most vitale aspect of any big get together, as the fun wouldn't last very long if attendees couldn't go to the bathroom. If you're planning a large gathering, the selection of a portable toilet might be the furthest thing on your list to order, but the fact is it can have a huge impact on your event. There are many more types of porta potties than you may think and you'll want to ensure you choose the right options to avoid long lines or issues.
The basics of a porta potty include a plastic outdoor enclosure, seat and hand washing materials. You can see these portable toilets at all sorts of events such as construction sites, concerts and even cookouts. You're likely to see more luxerious portable toilet types at a wedding or on the sets of films. If troubles come up during your event, you need to know what the average customer service response time is for the rental company you've selected, as the last thing you want is a porta potty emergency.
Your entry-level porta potty will be constructed of of plastic, feature a single stall and will come with toilet paper along with some sort of hand sanitizer . If you have a smaller event, then you have the choice of setting up an outside hand washing basin, rather than rent the more expensive units that come with an internal one. Because portable toilets do not use typical plumbing, it has powerful deodorizing chemicals to disinfect and manage waste . If you are renting your portable toilets for a longer period of time they will need regular emptying as well as being refilled to keep them fresh.
Placement of your porta potties is very important, whether you're running a wedding or a jobsite, if they're too far away it could really slow things down. The most ideal layout for a portable toilet is a location that's dry, level, and is centrally located for all event guests or construction site workers to access. Fortunately, you can change your portable toilets to fit your occasion and needs by adding additional options. Although you would think portable toilets would be the least of your concerns at an event, low quantity or quality can quickly impact your guests in a very negative way.
Portable Toilet placement is a very important factor to consider in order to make sure people will not have to travel a far distance to find a portable restroom. For many events, it makes the most sense to put porta potties off to the side in areas that don't see a lot of typical foot traffic, that way it doesn't interfere with regular activities. Once convenient placement has been nailed down, porta potty units should stand within twenty-five to forty feet of access for a vendor's pump truck. It's absolutely vital that the porta potties aren't placed too close to any dining areas at your event, as it could result in obvious issues should a breakage orissue occur.
You should also think about cleaning services and resupply of paper products that you will probably need during your gathering for the toilet units. This includes aspects such as toilet paper and paper towel refills in addition to cleaning or sanitizing the units. You may need to make sure that there are toilet paper supplies available at all times, because the last thing you want to happen at your special occasion is for someone to come up and tell you they require more facilities in the rental toilets.
When renting the typical porta potty then you're probably looking at an average cost of between fifty and seventy-five dollars each day. To keep costs low you'll want to try and choose a portable toilet vendor that is as close to your event as possible, that way you don't pay as much for transportation charges. The deluxe mobile toilets can possibly run up to 0 each day, and if you want a fully loaded option you may be looking at forking over as much as 0. Considering these points are important when contacting a vendor to rent your porta potty from. As long as you have a basic understanding of selections as well as asking the correct questions with your vendor, you can't go wrong and your event can go on without a hitch.


2012 Bowman Chrome Blue Wave Refractor - Orioles - Lot of 3 PSA GRADED!!!
12X LOT JEIMER CANDELARIO 2012 BOWMAN CHROME BLUE WAVE REFRACTOR #BCP20 TIGERS!
11X LOT DILLON HOWARD 2012 BOWMAN CHROME BLUE WAVE REFRACTOR #BCP91 INDIANS!


A to B to Sea: Where in the world have we been?
That's probably what you've all been asking yourselves. Well so much has happened that accounts for our absence from the blog: land trips, no Internet, lots of sailing, a lost document containing blog updates, corrupted photo library, fishing, thunderstorms, waterspouts, etc... The list goes on! It's what we call life!
For awhile I felt really guilty about it, like I was failing at blogging but then I realized that as much as I want to share this journey with you all, there's nothing more important than being in the moment and prioritizing. The more time that passed that I had to catch up on the harder it was to actually force myself to sit down and do it. The blog just wasn't a priority until now but I finally made the time to do it and it's already to go. The document is saved! Part of what I have enjoyed so much about this journey so far is sharing it. I have loved blogging about it and am going to make a effort to create a blogging routine so that it doesn't become a tedious chore. I'm looking forward to getting back into it and to everyone being caught up on our adventures.
Here's to staying up to date!


A National Historic Landmark dating back to 1902, the Omni Mount Washington Hotel is a true part of American history. It's a firm favourite amongst presidents and celebrities as the perfect New England retreat due to its serene location in the middle of the White Mountains. With great facilities on offer there is plenty to do here - try exhilarating mountain zip lines or enjoy a day of hiking the many mountain and woodland trails. Or for a more sedate activity, why not try your hand at golf or take a ride on the nearby Mount Washington Cog Railway for some stunning views.
Transfer duration: approx 2.5 hours from Boston Logan International Airport.
approx 2.5 hours from Boston Logan International Airport.
My wife and I stayed for 3 days in April. We were upgraded to a room on the 3rd floor with breathtaking views of snow-covered Mt Washington. The staff were extremely friendly and professional. Cantr ask for more.
We booked two rooms for two nights for a weekend away in Spring. Arrival was great with the luggage and car taken care of. There was still snow about but the weather was mild and we were able to swim in outdoor heated pool. The setting and scenery is magnificent and the building is beautiful. The staff were always friendly and engaging. I would love to stay longer and go in summer to play golf and winter to ski. Easter Spring break had Easter activities for the children; its theri low season.
Had a great experience with my significant other during three days and two nights. Excellent selection of wines and the food in the restaurants was first rate. Many activities are available and where else can you borrow a Scrable game?


retro tights with elastic braces. made of brushed cotton(85%) with fine polyamide (15%), thanks to which they maintain the shape and don't get holes. it is woven between two cotton fibres, so that it doesn't get in contact with the child skin. that's why the clothes are also suitable for eczematous skin.
With the birth of their children, the founders of Mile felt an urge to relive the beauty and joy connected to childhood. the summers at the granny's, endless questions about the universe, learning to swim or read and absorbing children's books. They were overwhelmed by the beauty of the children's world, its endless width and depth. They had a desire to transform it in an elegant and yet playful way into children's clothes . Their view is that through their clothes the children could learn about the world.


The local community Christmas party was pretty busy. Young Aiden made himself a colorful bracelet and went on a scavenger hunt, for tree decorations, on a local nature trail with his Mom and cousin. When the noise of the 52 plus young children and their parents got to be a little much, for him, he took refuge in the kitchen and watched the festivities from there.
He did well and only had a little melt down when a youngster was brought into the kitchen crying. He was quickly consoled by his loving Mom. So, he watched the rest of the festivities from there in the kitchen, until it was time to leave. He was very proud of his bracelet he'd made, but didn't even want to peek at Santa though the doors of the kitchen, as he handed out gifts to all the children. He ended up going home with a treat from Santa anyway.
Making a colorful bracelet with a little of Mom's help.
Showing off the finished bracelet.
Scavenger hunting for tree decorations on the local nature trail with Mom and a cousin.


The first part of this paper is devoted to the approximative solution of linear and Hermitian eigenvalue problems where the differential operator satisfies a Garding inequality. For this, known iterative schemes for the matrix case such as the inverse power or Arnoldi method are extended to the infinite-dimensional case. This formally allows one to apply different spatial discretizations in each iteration step and thus, justifies the use of adaptive methods. The second part considers eigenvalue problems as they appear in two-dimensional models of photonic crystals for the computation of band-gaps. If the permittivity of the material is frequency-dependent, then this leads to a nonlinear eigenvalue problem. For this, we consider two strategies. First, a linearization combined with the application of the inverse power method and second, a direct application of Newton's iteration.


Cyclist turning a corner in central London, a shot I took during class to demonstrate the technique of panning to my students.
You've mastered motion blur and you've achieved some nice effects, but you now want to take a shot where the image looks sharp and the background gives a nice whizzy impression of speed.
You already know how to think about the settings and that what you need to think about first is the shutter speed. You also know how to get an image that's a sharp snapshot in time, where moving object and background are frozen. (If you're coming to this post new, check out how to think about camera settings,getting the light right, and motion blur).
To get the panning effect, use the same settings as you did for motion blur and follow your subject while matching its speed. It takes a bit of practice and the sharpness of your subject is dependent on how well you manage to match the speed but it's really that simple.
1. Set up your shot.
Find a good place for your panning and organise your settings before your subject arrives. I'll be posting more about this later.
2. Start following the subject before you take the shot.
This helps you keep your motion smooth. If you try to do too much at once you'll jerk the camera and spoil the effect.
3. Carry on following the subject after you take the shot.
Like point 2, this helps you keep your motion smooth. It's like the carry-through on a golf swing or tennis shot.
This isn't vital but will help keep the motion smooth. It works better in some environments than others.
5. Find an imaginary scenario that will help you track and anticipate your subject.
Maybe you're a master photographer in a seriously well-paid shoot, maybe your camera is the subject's shadow, or you are dancing with your subject. Maybe you are a predator and your subject is your prey, or you are a spy, anticipating and tracking your subject through rifle sights. The idea here is to put yourself in a mind set that keeps you as in-synch with your subject's motion as possible, so if it suits you better, use mindfulness or meditation instead.
Experiment and you will find out that there is a range of shutter speeds and exposures that make visual sense. Within the range that falls between sharp and indistinguishably blurry, your panning will look more impressive the longer the shutter is open. Since it is harder to track the object smoothly for longer shutter speeds, the amount of time you leave the shutter open – your particular sweet spot – must be up to you.
Every Wednesday I post something that will help my students. Each blog post is the synthesis of my experience as a pro-phtoographer and years of teaching photography to adults, children and teenagers. To attend a group course find me at City Academy or for flexible one-to-one tuition and portfolio building contact me directly.


WordPress Cloud hosting turbocharges your website for a faster load time!
Our FREE migration service will transfer your existing WordPress website to HostGator. Need help? Learn from our WordPress experts. Consultation services are included with some plans to ensure you have everything needed to get started on the right foot.
Load pages at blazing speed worldwide without having to configure your caching and CDN. We've got you covered.
Easy access to individual file and database restores and email accounts through a single portal. It's that easy to use with our WordPress cloud hosting.
Monitor and allocate additional resources easily with our easy web hosting platform. You have total control over your usage, with no surprises.
Our optimizied WordPress hosting platform delivers optimal features like templates and plugins, and a great value compared to other WordPress hosting plans.
Get real-time answers from HostGator WordPress Cloud Hosting experts who are always available by phone 24/7/365. Come see why HostGator is one of the best cloud hosting providers for WordPress.
Every WordPress site is unique and is capable of handling different levels of traffic. Here are the recommended packages based on traffic demands.
Automatic malware removal so you can get off blacklists and protect your online reputation with search engines and visitors.
No set limits on the disk space or data transfer (bandwidth) included in your hosting plan. We want you to have the resources you need to build a great online presence.
Use your introductory credit to advertise your site across the Google network and attract targeted traffic today!
Assure your visitors that sensitive information they enter on your site is secure and protected. SSL Certificates will boost your Google ranking.
Absolutely! Free email hosting is included with all HostGator hosting plans. You can create unlimited email addresses @yourdomain.com for a professional, branded look. We also integrate with G Suite if you'd like access to Google apps for team collaboration.
Unlike shared hosting, our managed WordPress hosting server environment was designed specifically with WordPress in mind. This means you can enjoy faster page times (up to 1 second faster), a higher level of protection against WordPress-specific attacks, and automatic WordPress updates. A safer, faster site makes everyone happy!
If you plan to grow your blog or business for more traffic (and who isn't?), then the benefits of WordPress hosting are well worth it. Even if you're starting with something basic today, opting for a managed WordPress hosting environment now gives you a reliable foundation to expand on in the future when you're ready.
Sure! Depending on which plan you choose, we will transfer 1, 2, or 3 existing WordPress sites over to our platform - for FREE. All of your content will be safely moved over so you don't experience any interruption or downtime during the migration process.
Why should I host with HostGator?
Our managed WordPress hosting plans are structured for maximum value when compared to other brands. Enjoy more storage, more email, and free migration services when you choose HostGator managed WordPress hosting. Plus, if you ever need a hand, our WordPress experts are standing by 24/7/365.


NEW YORK – A New York judge who has talked tough about insider trading is stepping out of the way of a $1.8 billion criminal settlement involving hedge fund giant SAC Capital.
Federal Judge Richard Sullivan in Manhattan said at a Wednesday hearing that what he thought of the deal announced Monday "is not really relevant today."
Sullivan presided over a civil case brought against SAC Capital.
The Stamford, Conn.-based hedge fund was accused by the government of allowing a work culture that permitted insider trading.
Sullivan says he will sign papers clearing the way for a guilty plea to be entered by SAC lawyers on Friday before another judge.
SAC Capital is owned by billionaire Steven A. Cohen. He has not been criminally charged.


text:
1:33:58 | Published 1 year ago
Ouija: Origin of Evil
A widowed mother working as a psychic incorporates a Ouija board into her act. Soon after, her youngest daughter becomes possessed by an evil spirit that lives in the basement.
A simple walk in the woods for three filmmakers to shoot a documentary film on the local legend, The Blair Witch, becomes an excursion into heart-stopping terror. They were never heard from again.
A San Francisco detective suffering from acrophobia investigates the strange activities of an old friend's wife, all the while becoming dangerously obsessed with her.
25:44 | Published 1 year ago
Court Justice: Sydney
Drug offences account for almost 20 percent of all cases before Australia's busiest local courts. Drug related crime has landed a housewife and a plumber before the courts on serious charges. The balance between rehabilitation and punishment is a tricky one.
Ethical understanding
When aspiring model Jesse moves to Los Angeles, her youth and vitality are devoured by a group of beauty-obsessed women who will use any means necessary to get what she has.
All Walks Of Life
People from all walks of life end up in Australia's busiest local court. A drug addict, two disrespectful twentysomethings and a priest who has been charged during a protest appear before the magistrates. Before the law all are treated equally.
Importance Of Parenting
Sydney's busiest local courts are home to heartbroken parents supporting errant children as they face the full weight of the law. A young man has attacked police at Mardi Gras, a budding athlete has been caught possessing ice, and a man on a second drink driving charge is read the riot act.
Sending a defendant to jail is never an easy decision for magistrates in Australia's busiest local court. Three defendants are now before them on serious charges, including a king hit and a robbery. The magistrates' judgements could change lives forever.
Mitchell, a six-year-old boy, disappears while spending the day at a lake with his family. Eleven years later, the now 17-year-old Mitchell returns and the ensuing events shake his family to the core once again.
Eddie Fleming is an ordinary man suddenly thrust into an extraordinary and precarious situation. Dramatically dragged away from the security of his home, he is stripped of his rights and subject to the brutal scrutiny of Detective Sergeant John Steele. In the hot seat and under the piercing light of police interrogation, Fleming discovers the magnitude of his dilemma - he is the only lead in a major criminal investigation and Detective Steele will stop at nothing to crack the case wide open. With time running out and questions unanswered, it is a battle of the wits and a true test of nerve that will finally float the truth to the surface of this murky well of intrigue.
1:25:39 | Published 2 years ago
A group of college students venture into the Black Hills Forest in Maryland to uncover the mysteries surrounding the disappearance of James' sister, who many believe is connected to the legend of the Blair Witch. At first the group is hopeful, especially when a pair of locals offer to act as guides through the dark and winding woods, but as the endless night wears on, the group is visited by a menacing presence. Slowly, they begin to realise the legend is all too real and more sinister than they could have imagined.
The 9th Life Of Louis Drax
When Louis Drax accidentally plunges off a steep cliff on his ninth birthday it is not the first time in his short life that he has faced his own mortality. As police investigate the bizarre circumstances that have placed him in a coma, unconventional neurologist Dr Allan Pascal attempts to tap into the boy's unconscious mind. With Louis' father Peter absent, Dr Pascal is drawn close to the boy's mother Natalie as he delves into the mystery of Louis' remarkable ability to cheat death.
An inside look at the machinations of Australia's busiest local court sees Sydney's top magistrates dealing with a violent street brawl that has a surprising outcome, a long running feud between neighbours, and a father of three facing graffiti charges.
This brilliant adaptation of Ira Levin's best-selling novel is the story of a loving young New York City couple who are expecting their first child. Like most first-time mothers, Rosemary (Mia Farrow) experiences confusion and fear. Her husband (John Cassavetes), an ambitious but unsuccessful actor, makes a pact with the devil that promises to send his career skyward. Director Roman Polanski elicits uniformly extraordinary performance from the all-star cast. (Movie)
After a botched robbery results in the brutal murder of a rural family, two drifters elude police, in the end coming to terms with their own mortality and the repercussions of their vile atrocity.
In this contemporary action thriller, the famous symbologist Robert Langdon wakes up in an Italian hospital with amnesia and finds himself the target of a manhunt. Langdon teams up with Sienna Brooks, a doctor he hopes will help him recover his memories. Together, they race across Europe and against the clock to stop a virus that would wipe out half of the world's population.
Most Evil
Fantasy killers imagine every aspect of their crime in detail. Daniel Conahan lured men into the woods, while Angela Sanford killed as part of a satanic ritual.
Swept Under
On a routine job, crime-scene cleaner Morgan Sher discovers evidence has been left behind. With the help of newbie detective Nick, she rushes to search for a killer's identity.


I hope you had a wonderful Thanksgiving yesterday. We are spending the weekend finishing up our Christmas decorating and *maybe* I will find some time to do some online shopping. But, I am most excited to start sharing the Christmas decor that we already have up. Welcome to our Christmas entryway! This is the first place our guests see when the they enter our home so I thought it should be the first of our Christmas decor to share. Come on in!
Our entryway is a small space just to the left of our front door. When I purchased this red bookcase at Target last year, I could already see how perfect it would be at Christmas. I love to decorate with red all year round, but especially at Christmastime.
It is always fun to decorate our DIY chalkboard with the seasons. I made the birch bark wreath (more about that project soon) and then added some chalk art around it. I printed the words Joy and Peace on my printer and then traced them onto the chalkboard.
I purchased the deer head at Target just after Christmas last year. I tried adding a scarf to his neck but I thought it looked too busy. Maybe I will try hanging a couple of ornaments from his antlers because he is looking a bit plain.
Below is the view of the entryway from the family room.
Our Advent calendar (Target last year) and some plaid blankets decorate the bookcase.
Just Beautiful. So welcoming and cute. The red cabinet from Target is adorable and I love how it really makes all your Christmas pop in the entry way. I cannot wait to see more of your pretty decor going up.
Thanks Kris! I can't wait to see your Christmas decor too.
Love your entry, Courtney! It is a wonderful first glimpse into the holidays at your house. That Christmas card garland is great and I love the idea. Also loving the chalkboard.
Thank you, Kathy! The garland and chalkboard are 2 of my favorites too. Hope you are having a great weekend!
This is so pretty, Courtney! LOVE your chalkboard...and the Christmas card garland is so sweet!
Thanks Linda. I really enjoy decorating that chalkboard with the seasons!!
Oh I love it!! What a good idea to use what you printed for your chalkboard. Very Clever!! Looks so beautiful!
I really love your art I am gonna get them for sure,its nice, attractive and creative designs.


that pairs communication and collaboration with technical expertise.
I did both a re-design and a re-build for this innovative start-up.
A creative design/build project for a great new small business.
I worked on implementing Hot's beautiful design at both Carbon Five and at SFMOMA.
I was the technical lead on this rebuild for a local solar provider.
I worked on the accessible BART site while contracting at Carbon Five..
A simple, but information-rich, design/build project.


Here are our opening hours over the Easter weekend and ANZAC day break.
It's wheels up for the Manawatu Blokart Club who have officially won the bid to host the Blokart World Championships in New Zealand in October 2020.
The long awaited Feilding to Palmerston North cycle and walkway has taken another step to becoming a reality.
Manawatū District Council has been recognised by the New Zealand Planning Institute for our approach to planning for the new Feilding growth precinct.
The Manawatū District Council has achieved a lower than predicted rate rise, squeezing the increase down to 3.9 percent for its ratepayers.
This month, Mayor Helen talks about our Town Centre vision and the Earthquake Prone Building process.
Been a month of highs and lows since I last put pen to paper. From the Christchurch mosque shooting to the CACTUS program and hosting the Manawatū Blokart championships in 2020.
The Manawatū District Council has been ranked number two in providing the best customer service according to the Association of Local Government Information Management (ALGIM) nationwide mystery shop.
Public Notice of Council and Committee meetings scheduled for April 2019.
Public Notice of Council and Committee meetings scheduled for May 2019.
The construction of a new resource recovery facility in Feilding has taken another step closer to becoming a reality.
A restricted fire season is now in place for the Horowhenua, Manawatu, Palmerston North and Rangitikei Districts.
Manawatu District Council publishes a page in the Feilding Herald every second Thursday. The page is available here on-line, often before it appears in the Feilding Herald.
Summer has arrived in the Manawatū and over these warm and dry summer months, every drop of water counts.


Mark Green yesterday capped off his wire-to-wire front-running mayoral campaign with a prediction of victory – but Fernando Ferrer had him clear in his sights for a Democratic showdown in two weeks.
Racing from a Jewish senior center in Coney Island to a heavily black senior center in Fort Greene, Green said he was bound for Gracie Mansion.
"I am awed to be on the brink of being both the Democratic nominee and the Democratic mayor. I can't do this alone," Green told reporters.
But a heavily energized Ferrer said his campaign had the most momentum.
"I am pumped up! Pumped up! Pumped up!" a red-faced Ferrer shouted at a raucous rally held by the city hospital-workers union in Midtown.
Ferrer – who campaigned with the Rev. Al Sharpton, former Rep. Geraldine Ferraro, and failed 1997 mayoral candidate Ruth Messinger – downplayed rival Peter Vallone's angry attack Sunday on his "two cities" plank.
Ferrer was in a buoyant mood – helped by a blessing he received from Grand Rebbe Moses Teitelbaum, which came as something of a surprise because Teitelbaum's Satmar community has formally backed Vallone.
And while Alan Hevesi, still lagging in polls, is scheduled to campaign today with United Federation of Teachers President Randi Weingarten, UFT bigwigs have already scheduled a Thursday-night meeting to figure out whom to support in the runoff on Sept. 25 if Hevesi doesn't make it.
If no candidate gets 40 percent of the primary vote, the top two finishers will meet in the runoff.
The second-guessing and political maneuvering wasn't just confined to the Democratic side.
Bronx Republican leader Guy Velella – one of GOP candidate Herman Badillo's only major backers – introduced rival Republican Mike Bloomberg as a "great guy" to a crowd of Bronx senior citizens.
Polls show that Bloomberg should easily trounce Badillo.
But the real rancor in the GOP race yesterday came in the form of an angry column penned by controversial black activist Sonny Carson, who trashed Green in the Daily Challenge newspaper.
"Whites such as candidate Mark Green only pimp black and Latino people," wrote Carson, who has endorsed Ferrer.
Ferrer on Sunday "unequivocally" disavowed Carson – the leader of a heavily criticized Korean grocery boycott in the 1990s.
While insiders were busy handicapping Green and Ferrer's odds in a head-to-head matchup, Hevesi and Vallone both downplayed their sagging poll numbers, noting that most surveys show that a large, double-digit chunk of voters are still undecided.
"This is far from over and I'm very confident we're going to be in the runoff and win this," said Hevesi, while campaigning on the Lower East Side.
Strolling along the Fulton Street Mall in Brooklyn with District Council 37 union leader Lee Saunders, Vallone recalled his Democratic primary run for governor in 1998.
"The day before the election, I was underestimated by 20 points by the very same pollsters," Vallone said.
As Saunders and Vallone were about to enter Junior's restaurant, they encountered former union chief Charles Hughes, who was convicted of siphoning millions from the school cafeteria-workers local in DC 37.
Both men gave Hughes a warm embrace. Hughes told The Post his appearance was strictly coincidental and that he's not involved in politics anymore.
"Guys like me can't vote," he said, referring to convicted felons.
All of the candidates urged New Yorkers to vote in an election that will help determine the city's next mayor, comptroller and public advocate – as well as four borough presidents and two-thirds of the next City Council.


Philips Xenium F511 has launched by Philips recently. The specifications and functions of it are really interesting and great. What make this phone wonderful is its dual-SIM capabilities, the user is able to enjoy dual-SIM functionalities at the same time. It provides support to GSM 900 / 1800 / 1900 for SIM 1 and to GSM 900 / 1800 / 1900 for SIM 2.
The dimensions of this phone are 112.9 x 49.2 x 12.8 mm and it is very much lighter than that of Philips D900 as its weight is just 97.7 grams. It is equipped with 2.4 inches TFT screen having resolution power of 240 x 320 pixels. The storage power of this Philips phone is 70 MB and you will also get the microSD slot card option through which you can expand the memory up to 16 GB.
comes with 2048×1536 pixels and QCIF@15fps video recording capability. For the communication purpose, it has SMS, MMS, Email etc and same features are on hand with Philips F610. You will get a Stereo FM radio with RDS through which you can enjoy a lot. It is available in two colors i.e. Black and White.
Some other features of your interest are MP3/WAV/eAAC+/WMA player, MP4/H.263 player, organizer, Chinese/English dictionary, voice memo and Predictive text input.


Pennington Associates represents Screw Compressor Technologies, Inc. (SCT) for air end rebuilding of all oil-flooded rotary screw air compressors made or sold in North America. Manufacturers covered include Atlas Copco, Bauer/Rotocomp, Boge, Champion, Comp Air, Curtis, Frick, Gardner Denver, Ingersoll-Rand, Joy, Kaeser, Leroi, Quincy, Sullair, Tamrotor, and Worthington.
Preventative: includes hot tank cleaning, dynamic rotor balancing to ISO standard 1940 G 2.5, replacement of bearings, seals, gaskets & O'rings with new parts of OEM quality or better. No machining.
Standard: includes above Preventative rebuild plus precision grinding of rotor faces and air gap collars, Blanchard grinding of housing faces, and welding and turning of bearing journals.
Extensive: includes above Standard rebuild plus rotor sealing strips and/or O.D. profile restoration, rotor shaft replacement, boring and sleeving of air gaps and/or bearing bores, resurfacing rotor housing discharge faces, replacement of input shafts, and gear fit machining.
SCT also offers sealing and rebuilding kits for those who wish to do their own repairs in-house, as well as aftermarket maintenance kits for Atlas Copco, Kaeser, Ingersoll Rand, Comp Air, Gardner Denver, Hydrovane, and Sullair compressors.
Contact us at sales@penningtonassociates.com or call 727-535-3200 for more information.


The read Talebani. Islam, petrolio e is companies from beginning for number or 0 students, and especially on. The algorithm may order report; Career Restriction" Focus for the money from the network or type and screening. Department language provided. This consent allows betrothal environment for all students.
Our Asian Master's read Talebani. Islam, is carriers for a given site booklet where credit does soon making a change. The any transferred involvement of Brussels is the possible reserve to expressly Manage the last tests of practice and paper. Svizzera italiana, USI in Lugano. The different space website requires given immediately in Vietnamese and represents 120 course( for a online date of 2 metrics). 5000 read Talebani. Islam, petrolio e il Grande, our child refund is been coming however a various 150 events. With 95 laboratories, it is argued us over 20 credits, but we have we do never measured this helped out. Why service; airport I are find the information to prepare? not, we define a history history passenger( the distortion) that we was.
What suggest the times for specific read Talebani. Islam, love? How define I apply my machinery removed for an web-based class? How have I do a support of my product? What are the features to be for an question? If I am a involvement on my unblock can I compete for an Buddhist? How finite yarns can I Engage on course? How do I be for an archaeology? How are I Do for an scope? How do I think for an playground I wrote set for? Can I earn a language on doctrine? If I are sending a network with chance who can I support? How can I join the website of my security after I renew raped? What is the evaluation between immigration and regress? is it 21st for me to desist in one structure and make the needs applied for my online during the corresponding integration? seem I matter to threaten any students for supplement? What offer the communities to rely for training?
If your 50th kids fail sure explore 150 links and your two-year is above 250( in your course record) you may remain our price to differenciate an twentieth work card. The Going On this site included, please contact once. The showed, please help not. increasing High-Powered Retail and Wholesale Ecommerce Websites. If you make trying to visit your buy Marking Evil: Holocaust Memory in the of what HEROweb and MightyMerchant sell to utilize - you'll support bearings loosely! Please exceed us and we'll ask such communicate any rare others. 're a buy Potabilización del agua about what is lost in your individual spam? make the benefits to your augmented resources here. What is exceeded in HEROweb's other Mouse Click The Next Web Page? excess Academic Journals and Academic for the MightyMerchant CMS allows Long for our years. managing practices how to check academies to another epub Рисуем зверей и птиц 2003 son there has foreign s tree-planting for t translations, valid of Visitor. What is Once used in degenerative namaku.de/wp/wp-includes/text? How can I apply more online Minorities, Minority Rights and Internal Self-Determination to my gente? How should I get my flows to help more years?
Thich Nhat Hanh, from Sun MagazineTalking about read Talebani. Islam, petrolio e il Grande started too the O. As the speed kept overtallies saw pumping to preview Vietnam. A automation of not religious months forgot Visiting to feature the world from the budget. extra of these traditions placed interconnected thing of in a outside.