text:
using System;
using System.Collections.Generic;
using System.Linq;
using Nop.Core;
using Nop.Core.Caching;
using Nop.Core.Data;
using Nop.Core.Domain.Catalog;
using Nop.Core.Domain.Common;
using Nop.Core.Domain.Customers;
using Nop.Core.Domain.Orders;
using Nop.Core.Domain.Shipping;
using Nop.Core.Plugins;
using Nop.Services.Catalog;
using Nop.Services.Common;
using Nop.Services.Events;
using Nop.Services.Localization;
using Nop.Services.Logging;
using Nop.Services.Orders;

namespace Nop.Services.Shipping
{
    /// <summary>
    /// Shipping service
    /// </summary>
    public partial class ShippingService : IShippingService
    {
        #region Constants

        /// <summary>
        /// Key for caching
        /// </summary>
        /// <remarks>
        /// {0} : warehouse ID
        /// </remarks>
        private const string WAREHOUSES_BY_ID_KEY = "Nop.warehouse.id-{0}";
        /// <summary>
        /// Key pattern to clear cache
        /// </summary>
        private const string WAREHOUSES_PATTERN_KEY = "Nop.warehouse.";

        #endregion

        #region Fields

        private readonly IRepository<ShippingMethod> _shippingMethodRepository;
        private readonly IRepository<DeliveryDate> _deliveryDateRepository;
        private readonly IRepository<Warehouse> _warehouseRepository;
        private readonly ILogger _logger;
        private readonly IProductService _productService;
        private readonly IProductAttributeParser _productAttributeParser;
        private readonly ICheckoutAttributeParser _checkoutAttributeParser;
        private readonly IGenericAttributeService _genericAttributeService;
        private readonly ILocalizationService _localizationService;
        private readonly IAddressService _addressService;
        private readonly ShippingSettings _shippingSettings;
        private readonly IPluginFinder _pluginFinder;
        private readonly IStoreContext _storeContext;
        private readonly IEventPublisher _eventPublisher;
        private readonly ShoppingCartSettings _shoppingCartSettings;
        private readonly ICacheManager _cacheManager;

        #endregion

        #region Ctor

        /// <summary>
        /// Ctor
        /// </summary>
        /// <param name="shippingMethodRepository">Shipping method repository</param>
        /// <param name="deliveryDateRepository">Delivery date repository</param>
        /// <param name="warehouseRepository">Warehouse repository</param>
        /// <param name="logger">Logger</param>
        /// <param name="productService">Product service</param>
        /// <param name="productAttributeParser">Product attribute parser</param>
        /// <param name="checkoutAttributeParser">Checkout attribute parser</param>
        /// <param name="genericAttributeService">Generic attribute service</param>
        /// <param name="localizationService">Localization service</param>
        /// <param name="addressService">Address service</param>
        /// <param name="shippingSettings">Shipping settings</param>
        /// <param name="pluginFinder">Plugin finder</param>
        /// <param name="storeContext">Store context</param>
        /// <param name="eventPublisher">Event published</param>
        /// <param name="shoppingCartSettings">Shopping cart settings</param>
        /// <param name="cacheManager">Cache manager</param>
        public ShippingService(IRepository<ShippingMethod> shippingMethodRepository,
            IRepository<DeliveryDate> deliveryDateRepository,
            IRepository<Warehouse> warehouseRepository,
            ILogger logger,
            IProductService productService,
            IProductAttributeParser productAttributeParser,
            ICheckoutAttributeParser checkoutAttributeParser,
            IGenericAttributeService genericAttributeService,
            ILocalizationService localizationService,
            IAddressService addressService,
            ShippingSettings shippingSettings,
            IPluginFinder pluginFinder,
            IStoreContext storeContext,
            IEventPublisher eventPublisher,
            ShoppingCartSettings shoppingCartSettings,
            ICacheManager cacheManager)
        {
            this._shippingMethodRepository = shippingMethodRepository;
            this._deliveryDateRepository = deliveryDateRepository;
            this._warehouseRepository = warehouseRepository;
            this._logger = logger;
            this._productService = productService;
            this._productAttributeParser = productAttributeParser;
            this._checkoutAttributeParser = checkoutAttributeParser;
            this._genericAttributeService = genericAttributeService;
            this._localizationService = localizationService;
            this._addressService = addressService;
            this._shippingSettings = shippingSettings;
            this._pluginFinder = pluginFinder;
            this._storeContext = storeContext;
            this._eventPublisher = eventPublisher;
            this._shoppingCartSettings = shoppingCartSettings;
            this._cacheManager = cacheManager;
        }

        #endregion

        #region Methods

        #region Shipping rate computation methods

        /// <summary>
        /// Load active shipping rate computation methods
        /// </summary>
        /// <param name="storeId">Load records allowed only in a specified store; pass 0 to load all records</param>
        /// <returns>Shipping rate computation methods</returns>
        public virtual IList<IShippingRateComputationMethod> LoadActiveShippingRateComputationMethods(int storeId = 0)
        {
            return LoadAllShippingRateComputationMethods(storeId)
                   .Where(provider => _shippingSettings.ActiveShippingRateComputationMethodSystemNames.Contains(provider.PluginDescriptor.SystemName, StringComparer.InvariantCultureIgnoreCase))
                   .ToList();
        }

        /// <summary>
        /// Load shipping rate computation method by system name
        /// </summary>
        /// <param name="systemName">System name</param>
        /// <returns>Found Shipping rate computation method</returns>
        public virtual IShippingRateComputationMethod LoadShippingRateComputationMethodBySystemName(string systemName)
        {
            var descriptor = _pluginFinder.GetPluginDescriptorBySystemName<IShippingRateComputationMethod>(systemName);
            if (descriptor != null)
                return descriptor.Instance<IShippingRateComputationMethod>();

            return null;
        }

        /// <summary>
        /// Load all shipping rate computation methods
        /// </summary>
        /// <param name="storeId">Load records allowed only in a specified store; pass 0 to load all records</param>
        /// <returns>Shipping rate computation methods</returns>
        public virtual IList<IShippingRateComputationMethod> LoadAllShippingRateComputationMethods(int storeId = 0)
        {
            return _pluginFinder.GetPlugins<IShippingRateComputationMethod>(storeId: storeId).ToList();
        }

        #endregion

        #region Shipping methods

        /// <summary>
        /// Deletes a shipping method
        /// </summary>
        /// <param name="shippingMethod">The shipping method</param>
        public virtual void DeleteShippingMethod(ShippingMethod shippingMethod)
        {
            if (shippingMethod == null)
                throw new ArgumentNullException("shippingMethod");

            _shippingMethodRepository.Delete(shippingMethod);

            //event notification
            _eventPublisher.EntityDeleted(shippingMethod);
        }

        /// <summary>
        /// Gets a shipping method
        /// </summary>
        /// <param name="shippingMethodId">The shipping method identifier</param>
        /// <returns>Shipping method</returns>
        public virtual ShippingMethod GetShippingMethodById(int shippingMethodId)
        {
            if (shippingMethodId == 0)
                return null;

            return _shippingMethodRepository.GetById(shippingMethodId);
        }

        /// <summary>
        /// Gets all shipping methods
        /// </summary>
        /// <param name="filterByCountryId">The country indentifier to filter by</param>
        /// <returns>Shipping method collection</returns>
        public virtual IList<ShippingMethod> GetAllShippingMethods(int? filterByCountryId = null)
        {
            if (filterByCountryId.HasValue && filterByCountryId.Value > 0)
            {
                var query1 = from sm in _shippingMethodRepository.Table
                             where
                             sm.RestrictedCountries.Select(c => c.Id).Contains(filterByCountryId.Value)
                             select sm.Id;

                var query2 = from sm in _shippingMethodRepository.Table
                             where !query1.Contains(sm.Id)
                             orderby sm.DisplayOrder
                             select sm;

                var shippingMethods = query2.ToList();
                return shippingMethods;
            }
            else
            {
                var query = from sm in _shippingMethodRepository.Table
                            orderby sm.DisplayOrder
                            select sm;
                var shippingMethods = query.ToList();
                return shippingMethods;
            }
        }

        /// <summary>
        /// Inserts a shipping method
        /// </summary>
        /// <param name="shippingMethod">Shipping method</param>
        public virtual void InsertShippingMethod(ShippingMethod shippingMethod)
        {
            if (shippingMethod == null)
                throw new ArgumentNullException("shippingMethod");

            _shippingMethodRepository.Insert(shippingMethod);

            //event notification
            _eventPublisher.EntityInserted(shippingMethod);
        }

        /// <summary>
        /// Updates the shipping method
        /// </summary>
        /// <param name="shippingMethod">Shipping method</param>
        public virtual void UpdateShippingMethod(ShippingMethod shippingMethod)
        {
            if (shippingMethod == null)
                throw new ArgumentNullException("shippingMethod");

            _shippingMethodRepository.Update(shippingMethod);

            //event notification
            _eventPublisher.EntityUpdated(shippingMethod);
        }

        #endregion

        #region Delivery dates

        /// <summary>
        /// Deletes a delivery date
        /// </summary>
        /// <param name="deliveryDate">The delivery date</param>
        public virtual void DeleteDeliveryDate(DeliveryDate deliveryDate)
        {
            if (deliveryDate == null)
                throw new ArgumentNullException("deliveryDate");

            _deliveryDateRepository.Delete(deliveryDate);

            //event notification
            _eventPublisher.EntityDeleted(deliveryDate);
        }

        /// <summary>
        /// Gets a delivery date
        /// </summary>
        /// <param name="deliveryDateId">The delivery date identifier</param>
        /// <returns>Delivery date</returns>
        public virtual DeliveryDate GetDeliveryDateById(int deliveryDateId)
        {
            if (deliveryDateId == 0)
                return null;

            return _deliveryDateRepository.GetById(deliveryDateId);
        }

        /// <summary>
        /// Gets all delivery dates
        /// </summary>
        /// <returns>Delivery dates</returns>
        public virtual IList<DeliveryDate> GetAllDeliveryDates()
        {
            var query = from dd in _deliveryDateRepository.Table
                        orderby dd.DisplayOrder
                        select dd;
            var deliveryDates = query.ToList();
            return deliveryDates;
        }

        /// <summary>
        /// Inserts a delivery date
        /// </summary>
        /// <param name="deliveryDate">Delivery date</param>
        public virtual void InsertDeliveryDate(DeliveryDate deliveryDate)
        {
            if (deliveryDate == null)
                throw new ArgumentNullException("deliveryDate");

            _deliveryDateRepository.Insert(deliveryDate);

            //event notification
            _eventPublisher.EntityInserted(deliveryDate);
        }

        /// <summary>
        /// Updates the delivery date
        /// </summary>
        /// <param name="deliveryDate">Delivery date</param>
        public virtual void UpdateDeliveryDate(DeliveryDate deliveryDate)
        {
            if (deliveryDate == null)
                throw new ArgumentNullException("deliveryDate");

            _deliveryDateRepository.Update(deliveryDate);

            //event notification
            _eventPublisher.EntityUpdated(deliveryDate);
        }

        #endregion

        #region Warehouses

        /// <summary>
        /// Deletes a warehouse
        /// </summary>
        /// <param name="warehouse">The warehouse</param>
        public virtual void DeleteWarehouse(Warehouse warehouse)
        {
            if (warehouse == null)
                throw new ArgumentNullException("warehouse");

            _warehouseRepository.Delete(warehouse);

            //clear cache
            _cacheManager.RemoveByPattern(WAREHOUSES_PATTERN_KEY);

            //event notification
            _eventPublisher.EntityDeleted(warehouse);
        }

        /// <summary>
        /// Gets a warehouse
        /// </summary>
        /// <param name="warehouseId">The warehouse identifier</param>
        /// <returns>Warehouse</returns>
        public virtual Warehouse GetWarehouseById(int warehouseId)
        {
            if (warehouseId == 0)
                return null;

            string key = string.Format(WAREHOUSES_BY_ID_KEY, warehouseId);
            return _cacheManager.Get(key, () => { return _warehouseRepository.GetById(warehouseId); });
        }

        /// <summary>
        /// Gets all warehouses
        /// </summary>
        /// <returns>Warehouses</returns>
        public virtual IList<Warehouse> GetAllWarehouses()
        {
            var query = from wh in _warehouseRepository.Table
                        orderby wh.Name
                        select wh;
            var warehouses = query.ToList();
            return warehouses;
        }

        /// <summary>
        /// Inserts a warehouse
        /// </summary>
        /// <param name="warehouse">Warehouse</param>
        public virtual void InsertWarehouse(Warehouse warehouse)
        {
            if (warehouse == null)
                throw new ArgumentNullException("warehouse");

            _warehouseRepository.Insert(warehouse);

            //clear cache
            _cacheManager.RemoveByPattern(WAREHOUSES_PATTERN_KEY);

            //event notification
            _eventPublisher.EntityInserted(warehouse);
        }

        /// <summary>
        /// Updates the warehouse
        /// </summary>
        /// <param name="warehouse">Warehouse</param>
        public virtual void UpdateWarehouse(Warehouse warehouse)
        {
            if (warehouse == null)
                throw new ArgumentNullException("warehouse");

            _warehouseRepository.Update(warehouse);

            //clear cache
            _cacheManager.RemoveByPattern(WAREHOUSES_PATTERN_KEY);

            //event notification
            _eventPublisher.EntityUpdated(warehouse);
        }

        #endregion

        #region Workflow

        /// <summary>
        /// Gets shopping cart item weight (of one item)
        /// </summary>
        /// <param name="shoppingCartItem">Shopping cart item</param>
        /// <returns>Shopping cart item weight</returns>
        public virtual decimal GetShoppingCartItemWeight(ShoppingCartItem shoppingCartItem)
        {
            if (shoppingCartItem == null)
                throw new ArgumentNullException("shoppingCartItem");

            if (shoppingCartItem.Product == null)
                return decimal.Zero;

            //attribute weight
            decimal attributesTotalWeight = decimal.Zero;
            if (!String.IsNullOrEmpty(shoppingCartItem.AttributesXml))
            {
                var pvaValues = _productAttributeParser.ParseProductVariantAttributeValues(shoppingCartItem.AttributesXml);
                foreach (var pvaValue in pvaValues)
                {
                    switch (pvaValue.AttributeValueType)
                    {
                        case AttributeValueType.Simple:
                        {
                            //simple attribute
                            attributesTotalWeight += pvaValue.WeightAdjustment;
                        }
                            break;
                        case AttributeValueType.AssociatedToProduct:
                        {
                            //bundled product
                            var associatedProduct = _productService.GetProductById(pvaValue.AssociatedProductId);
                            if (associatedProduct != null && associatedProduct.IsShipEnabled)
                            {
                                attributesTotalWeight += associatedProduct.Weight*pvaValue.Quantity;
                            }
                        }
                            break;
                    }
                }
            }

            var weight = shoppingCartItem.Product.Weight + attributesTotalWeight;
            return weight;
        }

        /// <summary>
        /// Gets shopping cart weight
        /// </summary>
        /// <param name="cart">Cart</param>
        /// <param name="includeCheckoutAttributes">A value indicating whether we should calculate weights of selected checkotu attributes</param>
        /// <returns>Shopping cart weight</returns>
        public virtual decimal GetTotalWeight(IList<ShoppingCartItem> cart, bool includeCheckoutAttributes = true)
        {
            Customer customer = cart.GetCustomer();

            decimal totalWeight = decimal.Zero;
            //shopping cart items
            foreach (var shoppingCartItem in cart)
                totalWeight += GetShoppingCartItemWeight(shoppingCartItem) * shoppingCartItem.Quantity;

            //checkout attributes
            if (customer != null && includeCheckoutAttributes)
            {
                var checkoutAttributesXml = customer.GetAttribute<string>(SystemCustomerAttributeNames.CheckoutAttributes, _genericAttributeService, _storeContext.CurrentStore.Id);
                if (!String.IsNullOrEmpty(checkoutAttributesXml))
                {
                    var caValues = _checkoutAttributeParser.ParseCheckoutAttributeValues(checkoutAttributesXml);
                    foreach (var caValue in caValues)
                        totalWeight += caValue.WeightAdjustment;
                }
            }
            return totalWeight;
        }

        /// <summary>
        /// Get dimensions
        /// </summary>
        /// <param name="cart">Shipping cart items</param>
        /// <param name="width">Width</param>
        /// <param name="length">Length</param>
        /// <param name="height">Height</param>
        public virtual void GetDimensions(IList<ShoppingCartItem> cart,
            out decimal width, out decimal length, out decimal height)
        {
            if (_shippingSettings.UseCubeRootMethod)
            {
                //cube root of volume
                decimal totalVolume = 0;
                decimal maxProductWidth = 0;
                decimal maxProductLength = 0;
                decimal maxProductHeight = 0;
                foreach (var shoppingCartItem in cart)
                {
                    var product = shoppingCartItem.Product;
                    if (product != null)
                    {
                        var productWidth = product.Width;
                        var productLength = product.Length;
                        var productHeight = product.Height;
                        //attributes
                        if (!String.IsNullOrEmpty(shoppingCartItem.AttributesXml))
                        {
                            //bundled products (associated attributes)
                            var pvaValues = _productAttributeParser.ParseProductVariantAttributeValues(shoppingCartItem.AttributesXml)
                                .Where(x => x.AttributeValueType == AttributeValueType.AssociatedToProduct)
                                .ToList();
                            foreach (var pvaValue in pvaValues)
                            {
                                var associatedProduct = _productService.GetProductById(pvaValue.AssociatedProductId);
                                if (associatedProduct != null && associatedProduct.IsShipEnabled)
                                {
                                    productWidth += associatedProduct.Width * pvaValue.Quantity;
                                    productLength += associatedProduct.Length * pvaValue.Quantity;
                                    productHeight += associatedProduct.Height * pvaValue.Quantity;
                                }
                            }
                        }

                        totalVolume += shoppingCartItem.Quantity * productHeight * productWidth * productLength;

                        if (productWidth > maxProductWidth)
                            maxProductWidth = productWidth;
                        if (productLength > maxProductLength)
                            maxProductLength = productLength;
                        if (productHeight > maxProductHeight)
                            maxProductHeight = productHeight;
                    }
                }
                decimal dimension = Convert.ToDecimal(Math.Pow(Convert.ToDouble(totalVolume), (double)(1.0 / 3.0)));
                length = width = height = dimension;

                //sometimes we have products with sizes like 1x1x20
                //that's why let's ensure that a maximum dimension is always preserved
                //otherwise, shipping rate computation methods can return low rates
                if (width < maxProductWidth)
                    width = maxProductWidth;
                if (length < maxProductLength)
                    length = maxProductLength;
                if (height < maxProductHeight)
                    height = maxProductHeight;
            }
            else
            {
                //summarize all values (very inaccurate with multiple items)
                width = length = height = decimal.Zero;
                foreach (var shoppingCartItem in cart)
                {
                    var product = shoppingCartItem.Product;
                    if (product != null)
                    {
                        width += product.Width * shoppingCartItem.Quantity;
                        length += product.Length * shoppingCartItem.Quantity;
                        height += product.Height * shoppingCartItem.Quantity;
                        //attributes
                        if (!String.IsNullOrEmpty(shoppingCartItem.AttributesXml))
                        {
                            //bundled products (associated attributes)
                            var pvaValues = _productAttributeParser.ParseProductVariantAttributeValues(shoppingCartItem.AttributesXml)
                                .Where(x => x.AttributeValueType == AttributeValueType.AssociatedToProduct)
                                .ToList();
                            foreach (var pvaValue in pvaValues)
                            {
                                var associatedProduct = _productService.GetProductById(pvaValue.AssociatedProductId);
                                if (associatedProduct != null && associatedProduct.IsShipEnabled)
                                {
                                    width += associatedProduct.Width * pvaValue.Quantity;
                                    length += associatedProduct.Length * pvaValue.Quantity;
                                    height += associatedProduct.Height * pvaValue.Quantity;
                                }
                            }
                        }
                    }
                }
            }
        }

        /// <summary>
        /// Gets total width
        /// </summary>
        /// <param name="cart">Shipping cart items</param>
        /// <returns>Total width</returns>
        public virtual decimal GetTotalWidth(IList<ShoppingCartItem> cart)
        {
            decimal length, width, height = 0;
            GetDimensions(cart, out width, out length, out height);
            return width;
        }

        /// <summary>
        /// Gets total length
        /// </summary>
        /// <param name="cart">Shipping cart items</param>
        /// <returns>Total length</returns>
        public virtual decimal GetTotalLength(IList<ShoppingCartItem> cart)
        {
            decimal length, width, height = 0;
            GetDimensions(cart, out width, out length, out height);
            return length;
        }

        /// <summary>
        /// Gets total height
        /// </summary>
        /// <param name="cart">Shipping cart items</param>
        /// <returns>Total height</returns>
        public virtual decimal GetTotalHeight(IList<ShoppingCartItem> cart)
        {
            decimal length, width, height = 0;
            GetDimensions(cart, out width, out length, out height);
            return height;
        }

        /// <summary>
        /// Create shipment packages (requests) from shopping cart
        /// </summary>
        /// <param name="cart">Shopping cart</param>
        /// <param name="shippingAddress">Shipping address</param>
        /// <returns>Shipment packages (requests)</returns>
        public virtual IList<GetShippingOptionRequest> CreateShippingOptionRequests(IList<ShoppingCartItem> cart,
            Address shippingAddress)
        {
            //if we always ship from the default shipping origin, then there's only one request
            //if we ship from warehouses, then there could be several requests

            //key - warehouse identifier (0 - default shipping origin)
            //value - request
            var requests = new Dictionary<int, GetShippingOptionRequest>();

            foreach (var sci in cart)
            {
                if (!sci.IsShipEnabled)
                    continue;

                Warehouse warehouse = null;
                if (_shippingSettings.UseWarehouseLocation)
                {
                    warehouse = GetWarehouseById(sci.Product.WarehouseId);
                }
                GetShippingOptionRequest request = null;
                if (requests.ContainsKey(warehouse != null ? warehouse.Id : 0))
                {
                    request = requests[warehouse != null ? warehouse.Id : 0];
                    //add item
                    request.Items.Add(sci);
                }
                else
                {
                    request = new GetShippingOptionRequest();
                    //add item
                    request.Items.Add(sci);
                    //customer
                    request.Customer = cart.GetCustomer();
                    //ship to
                    request.ShippingAddress = shippingAddress;
                    //ship from
                    Address originAddress = null;
                    if (warehouse != null)
                    {
                        //warehouse address
                        originAddress = _addressService.GetAddressById(warehouse.AddressId);
                    }
                    if (originAddress == null)
                    {
                        //no warehouse address. in this case use the default shipping origin
                        originAddress = _addressService.GetAddressById(_shippingSettings.ShippingOriginAddressId);
                    }
                    if (originAddress != null)
                    {
                        request.CountryFrom = originAddress.Country;
                        request.StateProvinceFrom = originAddress.StateProvince;
                        request.ZipPostalCodeFrom = originAddress.ZipPostalCode;
                        request.CityFrom = originAddress.City;
                        request.AddressFrom = originAddress.Address1;
                    }

                    requests.Add(warehouse != null ? warehouse.Id : 0, request);
                }

            }

            return requests.Values.ToList();
        }

        /// <summary>
        ///  Gets available shipping options
        /// </summary>
        /// <param name="cart">Shopping cart</param>
        /// <param name="shippingAddress">Shipping address</param>
        /// <param name="allowedShippingRateComputationMethodSystemName">Filter by shipping rate computation method identifier; null to load shipping options of all shipping rate computation methods</param>
        /// <param name="storeId">Load records allowed only in a specified store; pass 0 to load all records</param>
        /// <returns>Shipping options</returns>
        public virtual GetShippingOptionResponse GetShippingOptions(IList<ShoppingCartItem> cart,
            Address shippingAddress, string allowedShippingRateComputationMethodSystemName = "",
            int storeId = 0)
        {
            if (cart == null)
                throw new ArgumentNullException("cart");

            var result = new GetShippingOptionResponse();

            //create a package
            var shippingOptionRequests = CreateShippingOptionRequests(cart, shippingAddress);
            var shippingRateComputationMethods = LoadActiveShippingRateComputationMethods(storeId);
            //filter by system name
            if (!String.IsNullOrWhiteSpace(allowedShippingRateComputationMethodSystemName))
            {
                shippingRateComputationMethods = shippingRateComputationMethods
                    .Where(srcm => allowedShippingRateComputationMethodSystemName.Equals(srcm.PluginDescriptor.SystemName, StringComparison.InvariantCultureIgnoreCase))
                    .ToList();
            }
            if (shippingRateComputationMethods.Count == 0)
                throw new NopException("Shipping rate computation method could not be loaded");

            //request shipping options from each shipping rate computation methods
            foreach (var srcm in shippingRateComputationMethods)
            {
                //request shipping options (separately for each package-request)
                IList<ShippingOption> srcmShippingOptions = null;
                foreach (var shippingOptionRequest in shippingOptionRequests)
                {
                    var getShippingOptionResponse = srcm.GetShippingOptions(shippingOptionRequest);

                    if (getShippingOptionResponse.Success)
                    {
                        //success
                        if (srcmShippingOptions == null)
                        {
                            //first shipping option request
                            srcmShippingOptions = getShippingOptionResponse.ShippingOptions;
                        }
                        else
                        {
                            //get shipping options which already exist for prior requested packages for this scrm (i.e. common options)
                            srcmShippingOptions = srcmShippingOptions
                                .Where(existingso => getShippingOptionResponse.ShippingOptions.Any(newso => newso.Name == existingso.Name))
                                .ToList();

                            //and sum the rates
                            foreach (var existingso in srcmShippingOptions)
                            {
                                existingso.Rate += getShippingOptionResponse
                                    .ShippingOptions
                                    .First(newso => newso.Name == existingso.Name)
                                    .Rate;
                            }
                        }
                    }
                    else
                    {
                        //errors
                        foreach (string error in getShippingOptionResponse.Errors)
                        {
                            result.AddError(error);
                            _logger.Warning(string.Format("Shipping ({0}). {1}", srcm.PluginDescriptor.FriendlyName, error));
                        }
                        //clear the shipping options in this case
                        srcmShippingOptions = new List<ShippingOption>();
                        break;
                    }
                }

                // add this scrm's options to the result
                if (srcmShippingOptions != null)
                {
                    foreach (var so in srcmShippingOptions)
                    {
                        so.ShippingRateComputationMethodSystemName = srcm.PluginDescriptor.SystemName;
                        if (_shoppingCartSettings.RoundPricesDuringCalculation)
                            so.Rate = Math.Round(so.Rate, 2);
                        result.ShippingOptions.Add(so);
                    }
                }
            }

            if (_shippingSettings.ReturnValidOptionsIfThereAreAny)
            {
                //return valid options if there are any (no matter of the errors returned by other shipping rate compuation methods).
                if (result.ShippingOptions.Count > 0 && result.Errors.Count > 0)
                    result.Errors.Clear();
            }

            //no shipping options loaded
            if (result.ShippingOptions.Count == 0 && result.Errors.Count == 0)
                result.Errors.Add(_localizationService.GetResource("Checkout.ShippingOptionCouldNotBeLoaded"));

            return result;
        }

        #endregion

        #endregion
    }
}


I am quite an active blogger I run a fair few blogs online.
The blog works like a magazine of my endeavours, works in progress and projects.
This is where nuggets and trivia about my characters are released but also where titbits of chapters, passages are flashed to fans much before publication of the story they belong to.
You are welcome to dig a little more into my blogging life which is in essence for me some sort of diary.
From sharing my efforts as a keen amateur gardener to the successes of the foodie I am, passing by my very human rants, my blogs are quite varied. Some are only available past midnight to disappear again a couple of hours later. Some are fully public and available.


There were 14 posts published in August 2009 (this is page 2 of 2).
MMORPG.com has word that Jeff Strain and David Reid, who run NCsoft, are no longer at NCsoft.
Looks like this isn't a layoff but a management shakeup. Unfortunately this does mean that David Reid can't inform the media how the departure of David Reid will have no effect on NCsoft.
No, I didn't forget about Poland.
Hearts of Iron 3 may well be the most infuriating game you'll ever love.
It looks creepily like the kind of wargame I owned in the 1980s with tens of thousands of counters. Note: I didn't say "played". No one "played" those monsters and remained sane.
Despite all of the above, it's actually fairly playable. Go figure.
Should you buy it? If you haven't already, probably best to wait for the inevitable blizzard of patches and expansions (Europa Universalis 3, for example, didn't become a really good game until the 2nd expansion). However, given how much of the game logic is exposed to Lua scripting, the manic Hearts of Iron user community may well just make a damn expansion themselves. With sharks and lasers. Well, maybe with PzkpfwIVds.
carrie from mythic moved back to daoc?
Jeremy Monken tells his story of savage weirdness and branded coffee mugs as a CSR for Warhammer Online to the Escapist.
At Christmas, the company provided a catered meal for the CSRs who had to monitor an in-game event and work through the holiday. I don't know if our bosses just ordered what they usually did, but the surplus of food made it seem like our department's slow decline had gone unnoticed. There was enough food for an army, but only a handful of us were left. For weeks afterward, the break room fridge overflowed with unopened trays of leftover corn. It felt like an offering left to appease the layoff god. Maybe this delicious corn would sate his mighty hunger.


If you're interested in making sure your books keep looking great years after they are printed, you're probably wondering about the quality of our paper. All of Blurb's photo book paper types are archival quality and acid-free.
All of our books should last as long as a typical bookstore book with proper care. Keep books away from direct sun, excessive heat, and moisture and they'll have long, happy lives!


text:
Facebook Ad Copy
Facebook Full Funnel Pack
Facebook Pro Setup
Motion Video Ad
More Facebook Services
Google Pro Setup
Google Search Ad Pack
Google Display Banner Pack
More Google Services
Landing Page Copy
Copywriting Pro
#90 Are Lookalike Audiences Dead?
With changes to Facebook's ability to track pixel events and build a bigger audience of high-value customers to mirror, has the lookalike audience died?
In this episode, we'll discuss the best targeting options at the start of 2022 and the reasons you may want to consider changing your paid social advertising strategy.
The topic of conversation today is, are lookalike audiences dead? Are they gone? Are they totally useless today? Well, the answer is not so clear, but I am starting to lean that maybe lookalikes aren't the king that they once were.
I do have a couple of clients that lookalikes still today work very well for, and those clients seem to be the ones that have a lot of high volume. So, I'm talking, they're doing hundreds of orders per day. When you're on that type of volume, Facebook's pixel, the standard browser pixel, as well as the conversions API, if you're on Shopify and you have that connected, you're getting two possible signals there. One for the browser pixel, and one from the conversions API, which is called service side tracking. And that was put in to, hopefully, help with the struggles that Apple has brought upon us as ad buyers.
Now, as I just mentioned, Apple is mostly the reason to blame for this. Maybe in the past, you were able to easily get 50 to a 100 conversions. In a relatively new store, if you had a good product and you were able to make those audiences and make lookalike audiences right away. Now, if you're not producing that type of volume, you might have a tough time, even going into Facebook Ads Audience Manager and making a lookalike. It simply won't let you. You can do a lookalike off of an already made audience, like off of visitors. And I mean, even if you wanted to pick purchases, but you likely don't have enough people in those audiences. So, I'd advise against that.
I'm talking about the value based lookalikes, where you go to audience manager, you actually select the create lookalike button. You select the pixel, you select the country, and you select the event, which obviously most people is going to be purchases. That's what most people are looking for. And once you make that selection, you click to create, and it's going to show you how many conversion events for that specific event, in this case, purchases, have you had in the last 30 days or so. You need to have, at the very minimum on that stat, you need to have 100 events at the bare minimum, or else Facebook's not going to even allow you to create that lookalike audience. So, it's going to say no.
Now, you can try to go down to ad cart, you might have enough there. But what I'm getting at here is if you're not reaching that 100 conversion events, if you're not reaching that 100 conversion events in a 30-day period of time, lookalikes are not going to work for you. So, if you've been doing lookalike audiences and say, maybe earlier in the year, you were very successful with them, but your volume has dropped since then, your lookalike performance is going to go down. It's not a one time thing. It's not like you reach this one goal of getting a 100 conversion events in that 30-day period of time and then you're home free. You don't have to worry about it, the lookalikes are good to go.
You need to maintain that month to month in order for that lookalike to be effective. So, in that case, as I mentioned, if you're not pulling heavy volume every single month, lookalike audiences might be dead for you or dead for your client. That might not be the best way to go. And so, we're going back, we're going back to interest based targeting. And there's a couple of different ways that I've found interest based targeting to be successful. And one thing to remember when you get tips, whether it be from me or from anybody on YouTube or anywhere else, really, is that there is no blanket strategy for everybody. There is no blanket strategy that works for every single product or every single vertical. That's just not possible.
When I give these tips and I give this information, and when you hear things from other people, yes, you might want to give them a try, but because they don't work, doesn't mean they don't work entirely. They just may not work for you. And everything is different, no product is the same, basically. No creative is the same. No background data for pixel and conversion API data is the same. So, you have to go in with an open mind, anytime you try these things. So, when it comes to interest targeting, if you talk to a Facebook rep today, and I really advise that you try not to, because a lot of these Facebook reps, and I don't mean to hate on them, but a lot of them don't have a lot of experience in actual advertising in Facebook.
They go into Facebook, having never had their own store, having never had real legitimate spend in their own ad accounts. They have some training, a little bit of training here from Facebook, but they don't have most of them. There's probably some good ones in there, but they don't have the real qualifications to tell you what kind of campaigns you should be running and what you should be targeting. Yes, they know how the platform works and what you should do with the platform and the features of the platform. But in terms of marketing, targeting, audiences, creative, I wouldn't listen to them.
And so, if you talk to them now, what they're going to want you to do is basically combine all ad sets, all targeting all together in one big thing, and just target one main ad set. For some people that might work. But here's what's going to happen. If you do that, you're going to get the average best, not necessarily the average best, but the average cost per conversion across the account. So, if you have one ad set that's able to do $20 cost per acquisition, you have another ad set that's able to do $75 cost per acquisition, and you really need to be near that 25, you might find yourself on these combined audiences, more at that $50 cost per acquisition.
Now, for some people that might be okay, but if you have a very limited margin, that's not going to work for you. And you're kind of almost tapping out, you're almost giving up and just like, "It could be more profitable if I got this lower cost per acquisition, but you know what? I'm just going to stay in this zone here. I'm not losing money, I'm not gaining money. I'm in this average, that's good enough for me." If you want to be there, that's fine. And if you're happy being there, that's fine. And if you're able to continue your business and grow it that way, that's fine. But if you're looking for profit and if you're looking for growth, you're going to have to spend more time and do more detailed interest targeting.
Now, I kind of have gone back and forth on this over the last couple of months, because like I said, it depends on the brand and the company that I'm running ads for. For some, instead of combining all interest based targeting into one big ad set, what I've found effective for some is to take like-minded interest together and put those in one ad set. So, if we're talking, I don't know, about... Let's talk about Air Jordan sneakers, say you're selling Air Jordan sneakers. What I mean by groups is, so maybe you have a brands group that you target. So, this brands group we're targeting Nike, we're targeting Reebok, Under Armor. That's the brands group.
And then we have another ad set where we're targeting actual shoe shoppers. So, we're targeting people that go to shoe stores and are looking for shoes online. And then maybe we have another set who like certain basketball players. Because we're selling Air Jordan, so we're obviously going to target people that like Michael Jordan, maybe Tiger Woods, other Nike personas that we're aware of. So, if you get what I'm saying there, that's what I'm talking about in the interest targeting groups, instead of just one lumped together group.
What I have also found successful in some of the smaller spend accounts that I've done before and that I've worked on is first finding out what are indeed your best interest targets. What are the ones that you should be targeting? The only way to find that out is to test. And yes, you're going to waste money. That's the only way to really find out. So, what I'll do is I'll create a ad budget optimization campaign, so not campaign budget optimization, and I'll have one to two creatives. You don't want to go too much because it's going to spread it out.
I mean, if you really have one piece of good creative you're happy with, I would even try that first. And have multiple ad sets, I'm talking four, five, six, more, where you're targeting one specific interest that's very, very different from the other. So, you don't want it to be necessarily in the same realm, just different enough. So, where you're targeting one specific interest per ad set and then you put a budget on each of those ad sets, and let those run for three to five days or so, to see what gets you the conversion event that you're looking for.
If you're looking for leads or if you're looking for purchases, those are the things that you should pay attention to. You let that run. You're going to have ad sets that never get a single conversion, and it's wasted money. There's no doubt about it. But you might discover one or two ad sets that have single interest in there that work really well and work quickly. And that you might find that you can get a really good cost per acquisition from that one interest target that you've found.
Now, maybe you find two and that their cost per acquisitions are very similar. If you have two ad sets and the cost per acquisitions are very similar, you want ad sets that have more than one conversion event, ideally at least three in that period of time, in that week period of time. And if you're getting a cost per acquisition that is low, compared to what you've had before, or as good. Say it was $15 cost per proposition and you really have been doing 25, that's a win. That's $10. So, if you take those two ad sets and you've shown the history to Facebook that, that creative with that targeting is going to give you that cost preposition. That's a time where you can combine those two ad sets together and you're going to get that average cost per requisition for that creative and targeting combination.
And you should, by theory, stick with that same cost per acquisition on average, but increase your audience size. Another question I get asked is, should I disable that expand targeting box that you see whenever you do interest targeting? And as of right now, I'm a fan of keeping that checked, keeping that on. Because when you select your interest target, that's going to be the base of the targeting, but allowing it to expand from there, in my opinion is fine. It's only going to expand when it can find more purchases for you or the algorithm thinks so, but it's still going to keep that same interest based initial part, so you're not getting entirely lost, you're not getting entirely off that interest target subject matter. So, I'm a fan of keeping that on.
I mean, these are things that you're going to have to test and things that you're going to have to try. But if you're out of the lookalike game, because you're just not getting enough data, you're not getting hundreds of orders a day, 50 to a 100 orders a day and you can't keep that pixel and that audience updated with hundreds of people in a 30 day period of time, interest based targeting is going to be the way to go for you. Don't force the lookalike. They're not as good as they used to be, unless you have that heavy data.
So, there you go. That's it for today. And we hope to keep putting out awesome episodes. If you're not actually subscribe to our YouTube channel, our Dropkick Ads YouTube channel, go find that on YouTube. One of my 2022 resolutions here is to be more active on YouTube, make more video content. So, go there, subscribe to the videos. And we're going to talk about more stuff, all types of things there. So, go check that out. And we're going to try to get this podcast out every single week, if we can, and help you become an ultimate marketer.
Back to Ultimate Marketer Podcast
#89 Checkout on Facebook and Instagram
#88 My New Favorite Metrics App
Articles View all
info@dropkickads.com
Dropkick Blog
Ultimate Marketer Podcast
Subscribe to get special offers and strategies.
© 2022 Dropkick Ads ® Powered by Shopify

redpajama_set_name: RedPajamaCommonCrawl


All Cast & Crew Members are asked to submit one ad - either a personal or a business ad. Remind your favorite local business that supporting West Theatre by purchasing an ad means that over 2000 people will see their business advertised! Link to Ad Sales form below.
Advertising orders, fees and materials must be submitted by January 6.
Shout-Outs - $25.00 A Shout-Out is a 140 character message displayed in the program on the Shout-Outs page. It's a great way for friends (no businesses, please) to participate and support their favorite character, dancer, singer, musician, or crew member!
Submitted ads must be press-ready or they will incur a charge of $35.00. A press-ready file is high resolution (at least 300 dpi), correctly sized, and in one of the four acceptable file formats (PDF, tiff, jpg or eps). No ads on CD will be accepted.
Download Ad Sales Form here to take with you when making sales calls!


Towncentric is holding a Holiday Fair to give people a mini Taste of Britain on Saturday February 26 at St George's Square, Gravesend.
Visitors can browse accommodation guides and holiday brochures to help plan breaks at destinations in Kent and throughout the UK.
Deanna Groom, Heritage Quarter Manager, said: "We have so much glorious countryside and so many wonderful seaside places right here in Kent. The Holiday Fair and mini Taste of Britain day is our way of saying come on lets celebrate Kent, let's celebrate the UK."
For more information, call Towncentric on 01474 337600.


Anagni is a typical Italian "borgo" famous for the "pope slap" in 1303 to Bonifacio VIII. Here we have chosen to stay, under the hills of this wonderful place.
From the Roma – Napoli highway, you can see our headquarters, the biggest in this field. Anagni is where we produce everything, from the bricks to stainless steel components and where we will be based for long time.


Specific hunt– This is a basic treasure hunt game with a slight twist. Hide lots and lots of coloured papers around the room and get the children to hunt for them. Hide one last piece of paper, with the word 'water' written on it, in a very difficult place. When the game has finished tell the children that the winner of the game is the one with the paper that says water. It's probable that no child has this piece, if so give them detailed instructions to find it. Link it into the idea that Ishmael and Hagar wandered a long time but needed God's Angel to help them find water.
Blind man's buff– little children love this game, as do some older ones too! It links well to the idea of Ishmael and Hagar wandering in the wilderness.
Target Challenge– Place a target on the wall, this can be just a circle drawn on paper or Goggle a good image to print. then give each child the means of making their own bow and arrow to shoot. You will need to pre soak the craft sticks for at least an hour, add to these some dental floss (for the bow string), some cotton buds (q-tips). Here are some nice picture instructions. At the end of the story time talk about how Ishmael became a very skilled bowman.
Second chances – This is a minute to win it game called dizzy mummy. The aim of the game is to unravel a toilet roll by spinning on the spot. It's a silly game that you lose if you tear the paper. Most children will fail to unravel the entire roll but God is a god of second chances, let your chosen volunteer have a second or third chance according to your time. At the end use the empty rolls as telescopes and talk about Hagar getting directions from the angel. For a video description of the game click here.
Directions – This is a simple copy me type game for the very young. Have the children copy the leader jumping, walking, hopping, and spinning round the room. Occasionally give an impossible instruction (eg. lick your elbow, fly, touch your nose with your chin, wiggle your ears, etc) then stop, say 'oops' or something to show that was wrong and announce 'Plan B' and give a new instruction.
Abundance – Have the children do something tiring, like hopping. As each child quits give then a sticker or small piece of candy. The last child, or those left when the time slot ends, gets a bigger reward. Then open your bag to reveal lots of rewards, give each child another reward. Explain that even when we fail God doesn't stop providing for us.


text:
Q: findOneAndUpdate does not update document I have the following method to update my document:
const findAndDisabledAlert = id => (
  AlertModel.findOneAndUpdate({ _id: id }, { $set: { status: 'D' } }, { new: true }, (err, alt) => {
    if (err) console.log(err);
    return alt;
  })
);

But this don't update the document and return null, I also tried without the "$set" but getting the same result.
The following test create the alert but does not change the status:
test('Should create, find and disable an alert', async () => {
    const currencyAlert = {
      name: 'VTC',
      pair: 'BTC',
      price: 0.00009241,
      condition: 'H',
      status: 'D',
      exchange: 'BITTREX',
    };

    const alert = await createAlert(currencyAlert);
    const alertDisabled = await findAndDisabledAlert(alert.id);

    expect(alertDisabled.status).toBe('D');
  });

A: Should the statment const alertDisabled = await findAndDisabledAlert(alert.id);
 not be

const alertDisabled = await findAndDisabledAlert(alert._id);

redpajama_set_name: RedPajamaStackExchange


text:
Rediff News
Rediff.com » News » Prs
News for Prs
LS passes assisted reproductive tech bill that omits LGBTQ, singles
The Lok Sabha on Wednesday passed a bill to regulate and supervise assisted reproductive technology clinics, with various members urging the government not to exclude single parents and the LGBTQ......
Railway cancels all regular tickets till June 30, specials to run
Bookings made before and during the lockdown period for journeys till June 30 on regular trains have been cancelled and a full refund will be given to passengers, the Indian Railways has said.......
Harry, Meghan leave Canada to set up base in US: Report
Britain's Prince Harry and wife Meghan Markle have reportedly shifted out of Canada permanently with their 10-month-old son Archie and set up their new base in Los Angeles, California. The Duke......
Opposition against extending Parliament session: Sources
The opposition parties told the government on Monday that it was against extending the ongoing session of Parliament, sources said. During a business advisory committee meeting chaired by Lok......
Govt likely to extend Parliament session by 2-3 days: Source
The government is considering extending the ongoing session of Parliament by at least two to three days to complete its legislative business, sources said on Friday. At the Bharatiya Janata......
Space tech firms urge PM to expedite approvals, fine tune rules
Space technology entrepreneurs, including Bharti Enterprises chairman Sunil Bharti Mittal, on Monday requested Prime Minister Narendra Modi to expedite regulatory approvals, provide his personal......
Codes give more power to states to be flexible on labour laws
The move will help industries in pushing authorities for exemption under various labour laws at a micro-level, along with demanding changes to bring greater flexibility in their operations related......
Does pan-India launch of Rythu Bandhu scheme make sense?
Telangana govt currently provides the state's 5.83 million farmers an income support of Rs 4,000 per acre per season, irrespective of the size of their land holding Illustration: Uttam......
How GST is stifling states' autonomy
Higher reliance on GST receipts for revenue reduces states' autonomy as these receipts depend on tax rates decided by the GST Council, a report by Delhi-based non-profit, PRS Legislative......
How to get Parliament to debate the Budget
Let there be a rule that if the Budget is not passed and funds cannot be drawn from the Consolidated Fund of India, there will be a government shutdown as it happens in the United States, says A K......
Why Rani feels today's actors are spoilt, pampered
'There are 10 people (around them) -- the PR person, the media person, the managers, the fitness person, the security...''We were never pampered. If we said something wrong, we would get......
Review: Thamizh Padam is a rip-roaring spoof
In a tiny village set in the vast paddy fields of Tamil Nadu, gathers a Panchayat meeting, headed by the dreaded nattamai (chieftain) -- wearing heavy jewellery --and accompanied by the inimitable......
Meet America's latest sprint hope
IMAGE: Ronnie Baker of the US celebrates after winning the men's 100m final. Photograph: Andrew Boyers/Reuters American sprinter Ronnie Baker has never seen a world outdoor championship in......
Die Mannschaft is not an association of stars
Claude Arpi captures the fan's passion for football in these entertaining e-mails to Ivan Crasto, Rediff.com's Sports Editor. Read Claude's first e-mailHis secondHis thirdHis fourthHis 5th:......
Videos for Prs
united progressive alliance
national democratic alliance
jd-u
rashtriya swayamsevak sangh
advani
central bureau of investigation
janata dal-united
Top Coverage News
Coming to India and making
Success in manufacturing is not just about being cheap - cheap labour, cheap land, cheap power...
India, through the eye of a camera
Commonwealth Games - 2014
The defence coverage of Rediff.com
Broswe by: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z


text:
module Api::Controllers::Contributors
  class Index
    include Api::Action

    def call(params)
      contributors = repo.all_with_commits_count.map! { |c| serializator.new(c) }
      send_json(count: contributors.size, data: contributors)
    end

    private

    def repo
      @repo ||= ContributorRepository.new
    end
  end
end

redpajama_set_name: RedPajamaGithub


text:
Our Father's Lutheran Church
OFLC Council
God Sightings Stories
Engage & Confirm
OFLC Foundation
Support Nourishing Hope
Joining NourishingHope
Leadership Committee
Gather & Serve Newsletter
Annual Meetings/Reports
Harvesters of Hope >
NOURISHING HOPE LEADERSHIP COMMITTEE
Sandy Zieglar
Sandy Ziegler has lived in Rockford for 44 years, is married and has a son and a granddaughter. She is a retired
elementary school teacher and is a member of the United Presbyterian Church of Rockford.
She started working with NourishingHOPE in 2019. Her volunteer activities include hearing screening at
Rockford Elementary School, meals on wheels, clerk of session at United Presbyterian Church and
Rockford Schools Music Partners. Sandy enjoys family, travel and volunteering.
Gail Swanson
My name is Gail Swanson and I've been a member of Our Father's Lutheran Church since about 1985! I enjoy being part of the bell choir, the quilting group, teaching 1st and 2nd grade SS, and changing the paraments in church to adhere to the Church calendar. I also enjoy volunteering at the RiverWorks Thrift Store and the Food Shelf. My hobbies include just about everything that keeps me outside. I am so pleased to have the opportunity to work with the Nourishing Hope ministry. It is very gratifying to see the community come together for this important program.
Diane Dorrel
Diane Dorrel has lived in Rockford and been a member of Our Father's Lutheran for the past 35 years.
She is now retired and enjoys volunteering as the statistical person for the reporting of
NourishingHOPE and other needs at OFLC.
Reid Gilbert
reid@Buffalocov.org
Reid grew up in Buffalo Covenant Church and has been the Missions and Care Pastor there for the past eight years. Reid and his wife Terri have four grown daughters, two grand daughters and two grandsons. Reid enjoys spending his free time farming on his family farm in Rockford Township, traveling, and spending time at their cabin in northern Minnesota.
Mike Dickman
Mike Dickman is a resident of Greenfield and has been a member of Our Father's Lutheran Church since 1994. He has participated in a wide range of volunteer activities over the years including the Church Executive Team, Church Council and the
 role of Treasurer. Mike has been active in NourishingHOPE since its inception in 2018. Mike also serves on the Board of RiverWorks a Rockford based nonprofit.
Brittni Bronczyk
brittni@ourfatherschurch.org
I live in Greenfield with my husband, Corey, and our two children, Connor and McKenzie. We also have two cats, two dogs and too many chickens to count running around. Most sunny days, you'll catch me in the garden. I enjoy growing our own food and preserving our harvest for healthy eating year round! We love anything outdoors and try to spend as much time as possible being outside.
I grew up in Western North Dakota, where my family raised Bison, we then moved to Eastern Montana for my high school years. I attended North Dakota State University for Child Development and Valley City State University for Elementary Education. Ever since I was a young child I was passionate about helping others. I am excited to be able to serve and support other members of our community.
Catalin and Kelly Dima
@influencechurchmn
Pastors Catalin and Kelly Dima are the lead pastors of Influence Church, which meets at Hanover Elementary School in Hanover, Minnesota. Influence Church was launched through the Association of Related Churches (ARC) in 2021.
Catalin came to know the Lord as a teenager in Communist Romania. He worked as a youth leader there and also helped to plant a number of churches in the villages around the Romanian capital of Bucharest. He immigrated to the United States and married the love of his life, Kelly, in 2004.
Kelly grew up in Minnesota and is a graduate of Bethel College and Seminary. Added together, Catalin and Kelly have over 50 years of ministry experience. From a very young age they both have felt a call to help people discover that living for God is the way to live a meaningful life.
Catalin and Kelly live in Hanover with their sons Alec, Manny, and Benjamin.
Tim Johnson
Tim is on staff at Light of Christ Lutheran Church in Delano as the Shared Ministry Coordinator. He has been connected with Nourishing Hope since 2021 and finds it to be not only an important part of his job but an important ministry of his church. "Serving people who are struggling and in need of help is central to what it means to be God's people," says Tim. "And finding ways to coordinate and engage in shared ministry between faith communities is such an important and public demonstration of the unity we share in service and love to others."
Nourishing Hope is one of those expressions of faith where you certainly don't wonder whether your efforts make a difference! Find your place of involvement and support. You and others will be glad you did!
Council Representatives : Chandler Drummond, Pastor Aaron Fuller
3903 Gilbert Ave. SE [directions]
Rockford, Minnesota 55373
office@ourfatherschurch.org
Office Hours: Varies by week and person.
Please contact them for most current hours and to make an appointment.
Contact them using their emails: for
Coordinator of Internal Ministries and Administration:
Melissa@ourfatherschurch.org, or
Coordinator of Community Outreach
Pastor Aaron Fuller
PastorAaron@ourfatherschurch.org


Spring 2014 is running wild in the Stone Barns Center barnyard. Our Finn-Dorset ewes have had their lambs, and the flock is getting ready to head out to pasture after their wool is sheared in early May. Scan through these pictures to learn how we raise our sheep and to see the newest members of our flock.
Ear tags help our farmers keep track of who's who. Female lambs get a left ear tag, males get a right ear tag. Red tags note triplets or quadruplets. Green tags note twins. Orange tags note a single birth. Tags are numbered with the year each lamb was born and its birth order. So the 21st lamb born this season is number 1421.
Sheep are the primary grazers in our rotation of livestock around our 22 acres of pasture. They spend May through October moving from paddock to paddock, eating the greenest and tallest of grasses.
Soon after a lamb is born, a ewe and her lambs are given a private part of the barnyard—we call it a "jug—in which to bond. This spacing also helps our farmers make sure everyone is healthy and that the lambs are getting enough milk.
Black wool is a rare recessive trait, but this year our flock has two black lambs!
Tails! Finn-Dorset sheep have naturally long tails. This year, our farmers will not be docking (i.e., cropping) lamb tails. Come see how they wag!
This year 71 lambs were born to 41 ewes.
Our newborn lambs won't be sheared this year, as their fleeces are short enough to keep them cool over the summer. When the ewes and yearlings are sheared in May, each animal will be relieved of about five to eight pounds of raw wool—a vital haircut that will help keep them comfortable in the hot months ahead.
Farmers partially shear the ewes—their necks, bellies and rears—before they give birth to their lambs. This creates a more hygienic environment for birthing and helps newborn lambs find the udder to nurse more easily.


Scandinavian modern design, as a style, first emerged between the First and Second World Wars but peaked in popularity in the 1950's and is in vogue again today. It includes objects designed in Denmark, Finland, Iceland, Norway and Sweden. Scandinavia is the geographical region around Scandia, the mountain ridge running along Norway and Sweden, a land mass that included Denmark before the ice age separated Denmark from the north.
Until the end of the 19th century, the Nordic region was a poor agricultural backwater. For most Scandinavians, money was short and eking a living from the land was a struggle. As a result, homes and possessions were simple, spare and functional. This pared-down design ethos continued into the industrial era, which started later in Scandinavia than the rest of Western Europe. Decorative objects were produced mainly for the small upper class, and were often based on patterns borrowed from France, Germany and Britain.
Organic shapes and styles are characteristics of Scandinavian design, and reached a peak during the 1950's. These fluid, curvaceous outlines were very different to the modern designs of the Bauhaus designers, which employed square shapes and hard lines, but Scandinavian designers still remained true to the idea of creating simple, functional forms.
-Magnus Englund & Chrystina Schmidt of SKANDIUM. Photography by Andrew Wood.


text:
« Review – Howlin' Comedy Club, New Wimbledon Studio
Review – The King's Speech, Wyndham's Theatre »
More Bleedin' Hot Pies!
Some might call it poor taste. Some might call it an act of expedience before the latest VAT comes in.
We'd call it a deliciously canny and waggish merchandising ploy.
The Whingers love to fill a few minutes taking in the finest in the shops at theatres. Themed products always amuse us. Singin' in the Rain is offering a range of branded umbrellas, Phantom of the Opera markets a magic mug which when filled with a hot drink sees the Phantom's white mask magically appear and most musicals have the usual CDs, T-shirts and key rings you'd expect, though at least in Sweeney Todd a key is crucial to the plot.
Occasionally this is taken just that little bit further. The Menier's Abigail's Party is serving pre-show 70s meals including chicken Kiev and fondue (as different courses we presume). And of course the Whingers were seduced into parting with their cash last year when at Frankenstein a smoking green cocktail called The Experiment went on sale in the National's bar.
But the Sweeney Todd people have probably come up with the best one yet. In keeping with show's grisly cannabalistic plot the bars at the Adelphi theatre are selling "Mrs Lovett's Bleedin' Hot Pies". And they do indeed bleed. Quite literally.
Cut into the succulent gravy through the pie's velvety and wavy crust and 'blood' seeps out. Well, with health and safety restrictions being what they are it's understandably not real blood but ketchup. They're messy but not oily and sadly they're not served with a doily so your hands might get smeary dearies. Unsurprisingly the Whingers had to try them.
Fortunately there's no other theming of the ingredients, so don't expect to find sawdust, fingernails, pussycats or Royal Marines in them; 100% natural ingredients according to the wrappers. There's a meat one and an off-topic vegetarian version available which, as Andrew won't go near anything that's even touched meat, meant we had to try them both. And how delicate, luscious and ambrosial they are too, not bad taste after all. But we do wonder what Mr Sondheim makes of it all.
Perhaps the Theatre Royal Haymarket, where One Man, Two Guvnors is now playing could serve hummus in a cricketer's box or if Naked Boys Singing rears its head again we might see sausages sandwiched between buns on display.
Seems a downright shame, seems an awful waste if these pies are confined to the Adelphi. Perhaps they'll catch on in the world out there and we'll see Imelda Staunton as Mrs Lovett spearheading the advertising campaign.
Mrs Lovett's Bleeding Hot Pies are at the Adelphi Theatre for a price of £5 each and if the show doesn't run beyond its current booking period (until Sept 22nd) will narrowly and fortuitously escape October's new "Hot Pie Tax" on products "above ambient air temperature when provided to the customer".
Maybe it was something in the best pies in London or the ambient air that scrambled our thoughts more than ever to notice that Adelphi Theatre is an anagram of Helipad Theatre, so we believe this playhouse would be just the place to see more choppers on display with a revival of Miss Saigon. But then it also rearranges into The date? April, eh! If you get it…
Ask for them at the bar if you want to make an arse of yourself and eat it too.
Who ate all the bleedin' pies?
This entry was posted on Sunday 1 April 2012 at 12:15 am and is filed under West End Whingers.
Tags: Adelphi Theatre, entertainment, Hot pie tax, Imelda Staunton, London, merchandising, Mrs Lovett, musical, Stephen Sondheim, Sweeney Todd, theatre, VAT, west end
5 Responses to "More Bleedin' Hot Pies!"
Captain Obvious Says:
Sunday 1 April 2012 at 12:44 am
I remember seeing the Opera North production of Sweeney Todd when it was at Sadler's Wells, and coming back in from the interval to the delicious smell of meat pies enriching the breeze – they'd pumped the aroma into the auditorium while the audience was out. Gleefully perverse.
Julia Eccles Says:
Naughty boys!
Er… April Fool!
Simon Treves Says:
Best one of the day. I bow down in awe.
Monday 2 April 2012 at 12:09 pm
April Fool or not, VAT is not your strong point. The Adelphi isn't a supermarket last time I went – though the audience attending Love Never Dies looked as if they shopped at Lidl. So the Adelphi would be charging VAT on those 'pies' before October just as they do at fast food outlets today.


text:
Georgia World Congress Center
Atlanta, GA | April 9-12, 2018
On-floor Seminars
Expo Guide
Approval To Attend
Exhibitor Videos
MODEX Bistro
Register a Group
Exhibit at MODEX
ShowPro Live Exhibitor Workshop
New Exhibitor On-boarding
Attendee Statistics
Attendance Promotion
Solution Centers
MHI Membership Benefits
Restaurants & Attractions
Hyster to Showcase Brawn and Brains at MODEX 2018
Hyster Company
( Booths: B2921 C1445 )
GREENVILLE, N.C. (March 26, 2018) – With its full line of tough materials handling solutions, Hyster Company is showcasing its brawn and brains to help MODEX attendees prepare for the future of materials handling. From April 9-12 in booth #B2921 at Atlanta's Georgia World Congress Center, attendees can learn how to use Hyster Company's tough and resourceful solutions to help boost productivity in their operations.
Hyster® robotic lift trucks will be in action demonstrating their infrastructure-free navigation which can help operations optimize workflow, provide flexibility and achieve significant cost savings. The company will also be introducing the new virtual reality orderpicker simulator with motion platform, designed to give users an accurate sense of operating a Hyster® lift truck.
Attendees will be able to discover innovations designed to improve operator and pedestrian safety, as well as explore the range of alternative power solutions offered by Hyster, including hydrogen fuel cells, lithium-ion and lead-acid batteries, and talk to experts to determine the best option for their specific operation.
In addition, Hyster will be showcasing its zero-emission power solutions for ports and other Big Truck applications in booth #C1455. Hyster representatives will be discussing the potential for new, cleaner electric technologies to replace large diesel engines, and the cost savings and additional benefits they can provide.
To continue the electrification conversation, join Hyster in the Transportation & Logistics Solutions Theater 1 on April 10 at 1:45 p.m. as Lyndle McCurley, Vice President Big Trucks Americas, presents "Clean Technologies for Mobile Port Equipment." Participants will learn about the development and integration of zero emissions technologies in container handling equipment and explore the inherent infrastructure challenges for port environments transitioning to electric mobile port equipment.
Hyster technical experts will be available to discuss the company's latest product and solution innovations in booth #B2921 throughout the conference.
About Hyster Company
Hyster Company is a leading world-wide lift truck designer and manufacturer. Hyster Company offers 130 lift truck models configured for gasoline, LPG, diesel and electric power, with one of the widest capacity ranges in the industry — from 2,000 to 105,000 lbs. Supported by one of the industry's largest and most experienced dealer networks, Hyster Company builds tough, durable lift trucks that deliver high productivity, low total cost of ownership, easy serviceability and advanced ergonomic features, accompanied by outstanding parts, service and training support.
Hyster Company is a division of Hyster-Yale Group, a wholly owned subsidiary of Hyster-Yale Materials Handling, Inc. (NYSE:HY). Hyster-Yale Materials Handling, Inc. and its subsidiaries, headquartered in Cleveland, Ohio, employ more than 6,800 people world-wide.
Lauren Blount - Events
Yale Materials Handling Corporation
lauren.blount@hyster-yale.com
cHARLOTE, cHARLOTTE, NC 28273
« Back to Press Releases
© Copyright 2019 MHI. All rights reserved Terms & Conditions | Privacy Statement


Product information "AR15 Mid. l. STAINLESS | .500-19" | MuD:49/64-20 | L:16.00" | Cr-Moly Steel"
Related links to "AR15 Mid. l. STAINLESS | .500-19" | MuD:49/64-20 | L:16.00" | Cr-Moly Steel"
Customer evaluation for "AR15 Mid. l. STAINLESS | .500-19" | MuD:49/64-20 | L:16.00" | Cr-Moly Steel"


text:
VIDEO: UFO spotted in skies over Sheffield city centre – The Star
Is this the moment a UFO was spotted in the skies over Sheffield city centre?
The clip, uploaded to video sharing website YouTube, shows a mysterious ball of white light rising slowly through the skies above the city just a couple days after Christmas.
The footage, which was filmed early in the morning of December 27, was shot by the University of Sheffield and shows the flickering, white globe slowly getting bigger as it rises through the atmosphere.
The video, entitled "UFO in Sheffield" begins with a caption which reads: "Real time recording of strange light in Sheffield sky."
The footage was shot at 7.18am from a fixed webcam which is used to monitor peregrines in their nestbox on top of the University's St George's Church lecture theatre in St George's Terrace.
In the film, one of the peregrines can be seen on its perch, oblivious to the light rising above the twinkling streetlights of the sleeping city.
What do you think? What are your explanations for the UFO?


text:
Anthony Hall (born 1942) is a former American elected official. He was a member of the San Francisco Board of Supervisors from 2000 to 2004. He resigned in 2004 to accept appointment as executive director of the Treasure Island Development Authority, a post he held for only 14 months. Hall later filed papers for running against the incumbent Newsom in the 2007 mayoral election but dropped out before the election, citing Newsom's entrenchment.
He was known as the lone conservative on the Board of Supervisors and surprised the other board members when he supported Matt Gonzalez's successful bid for president of the board.

Early life
Born in Los Angeles, Hall attended Loyola High School and graduated from the University of California, Los Angeles with a degree in economics and public administration. He moved to San Francisco in 1964. His volunteer and civic activities have included singing Mass at St. Brendan's Church on Sundays, volunteering as a track coach at St. Ignatius Prep School, and announcing the San Francisco's St. Patrick's Day Parade.

Hall and his band "The Hallmarks" perform at weddings and are a mainstay of the San Francisco music scene.

Career
He is a former Executive Assistant to the Presiding Judge of the San Francisco Superior Court.

San Francisco Board of Supervisors
In 2000, Hall was elected to represent District 7 on the San Francisco Board of Supervisors.

The San Francisco Chronicle said of Hall at the time: "Hall's politics are old-school San Francisco, and he plans to keep it that way". The Chronicle described Hall as "focused on neighborhoods the same way that supervisors were in the late 1970s during the city's first attempt at district elections". He was praised unanimously in a resolution by his colleagues calling Hall "a dedicated legislator serving with integrity, intelligence, and a willingness to work with all parties for the common good of the City".

As a Supervisor, Hall:

 Led the restoration/renovation of the Harding Park Golf Course, resulting in the acquisition of annual PGA tournaments, which have provided the City with millions in revenue.
 Introduced and passed legislation for the re-build of Laguna Honda Home for the aged.
 Spearheaded the reconstruction of the Ocean Avenue commercial district.
 Led the renewal and reconstruction of the City's Youth Guidance Center.
 Worked with state and local agencies and private entities to solve the Lake Merced water loss/level problem.
 Led the restoration and beautification of the City's Great Highway and the adjoining Ocean Beach.
 Preserved and initiated maintenance for parks and open spaces, including the building of sports fields, and incorporated after-school recreational and educational programs for youth.
 Implemented programs within his district to calm traffic in conjunction with street beautification projects.
 Drafted the "Blueprint for Homeless Reform Policy", introduced in 2001, was the product of a 15-year personal study which encompassed a 7-point package of ordinances and resolutions which established quality of life and civility laws and mandated policy changes within the homeless industry.  Hall directly questioned the efficacy of then-Supervisor Gavin Newsom's "Care-Not-Cash" initiative.
 Implemented the Safely Surrendered Baby Law (Senate Bill 1368) for San Francisco and passed the Safe Haven for Newborns legislation.

Treasure Island Development Authority
Hall served on the Board of Supervisors until August 2004, when Mayor Gavin Newsom asked Hall to assume the post of Executive Director of the Treasure Island Development Authority. Mayor Newsom publicly stated that his choice was due to Hall's record of accomplishments in the area of public facilities and special projects. Newsom appointed Sean Elsbernd to replace Hall on the Board of Supervisors.

Hall conducted on-going meetings with the developer regarding plans and contract compliance issues, as well as parallel interaction with the United States Navy principals responsible for re-conveyance of the property to San Francisco. The Navy had become skeptical of San Francisco's sincerity and the ability of the developer to issue a concrete redevelopment plan after more than seven years. Newsom insisted upon a renewal of the developer's contract, despite the fact that the developer had not met its terms; there were substantial payment shortfalls for specific developmental milestones, and a series of discarded timetable extensions. Newsom also insisted that other "partners" be allowed to join the development team without going through the public bidding process as mandated by the City Charter.

In October 2005, the Treasure Island Development Authority voted to require the resignation of Tony Hall from the project "without cause". Hall subsequently warned of the dangers of development on Treasure Island, calling it a "seismically unsafe toxic landfill" on top of the San Andreas fault.

Investigation
In 2008, Hall was found guilty of campaign finance violations by the San Francisco Ethics Commission.  Hall suggested that "the investigation against him was conspired by Mayor Gavin Newsom, Supervisor Sean Elsbernd and attorney Jim Sutton to prevent Hall from running against Newsom in 2007 and Elsbernd in 2008."

Other work
Since departing Treasure Island, Hall has maintained a blog on issues related to civic life in San Francisco, and is a columnist for the Westside Observer.

In 2007, Hall began a campaign for San Francisco mayor to challenge Newsom, but dropped out. In March 2011, Hall announced he was running for mayor a second time, but his bid was unsuccessful.

References

External links
Campaign website

1942 births
Living people
San Francisco Board of Supervisors members
University of California, Los Angeles alumni

redpajama_set_name: RedPajamaWikipedia


text:
Q: Getting html source from url, css inline problem! I have a strange problem:
I am getting the html source from url using this:
string html;
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(Url);
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
   using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
   {
      html = reader.ReadToEnd();
      reader.Close();
   }
   response.Close();
}

The page that I am requesting has css inline like this:

But the html var value has only:

Anyone knows why? I have tested with many enconders and using WebRequest and WebClient too, but doesn't work too.

A: You might need to send a User Agent so that the site doesn't think that you are a bot. Some sites don't bother with CSS when requested from bots. Also the reading of the remote HTML could be simplified using a WebClient:
using (var client = new WebClient())
{
    client.Headers[HttpRequestHeader.UserAgent] = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.4) Gecko/20100611 Firefox/3.6.4";
    string html = client.DownloadString(url);
}

A: Are you viewing the source through a browser development tool, by clicking inspect element? Is it possible you are viewing the source from a browser which is adding the height and width attributes on the client side through JavaScript and showing you the modified style.


text:
Les New Zealand Breakers sont un club néo-zélandais de basket-ball basé à Auckland. C'est le premier club non australien à avoir été convié a disputer la National Basketball League, le plus haut niveau en Australie. Ils sont, avec les Hunter Pirates, l'un des deux clubs à avoir profité de l'extension de la ligue en 2003.

L'équipe est définie comme étant représentative de la nation néo-zélandaise dans cette compétition australienne. Beaucoup de Tall Blacks (l'équipe nationale) ont joué dans cette équipe. Il en est de même pour plusieurs joueurs depuis en National Basketball League néo-zélandaise  (qui porte paradoxalement le même nom que la ligue australienne).

Historique

Palmarès
 Champion NBL : 2011, 2012, 2013, 2015

Entraîneurs successifs

 Oct. 2003-déc. 2003 :  Jeff Green
 Déc. 2003-2015 :  Frank Arsego
 2005-2013 :  Andrej Lemanis
 2013-2016 :  Dean Vickerman
 2016-2018 :  Paul Henare
 2018-2019 :  Kevin Braswell
 2019- :  Dan Shamir

Effectif actuel

Maillots retirés
 Pero Cameron
 Phill Jones
 Dillon Boucher
 Mike Chappell
 Lindsay Tait
 Brian Green
 Rich Melzer

Notes et références

Liens externes
  Site officiel

Club de basket-ball en Nouvelle-Zélande
Club sportif fondé en 2003
Club sportif à Auckland


By July of next year, a practice in Ohio's commercial harbors will no longer be allowed — the dumping of dredged materials into the open waters of Lake Erie. This ban is the result of a bill passed by the legislature in 2015 (SB 1), and is part of the state's broader efforts to keep excess nutrients from entering the shallowest of the Great Lakes, causing harmful algal blooms and degrading water quality.
The legislative action from four years ago, along with subsequent funding commitments, has led to an unprecedented effort in the state to find beneficial uses of these materials — the rock, sand, gravel, mud and clay removed from the bottom of shipping channels to keep them safe for navigation.


text:
Preventing animal cruelty not an attack on pet ownership, says Irene Payne
I welcome Jeanne Herman's appreciation of animals, but her commentary left me a little confused regarding the point she was trying to make.
Preventing animal cruelty not an attack on pet ownership, says Irene Payne I welcome Jeanne Herman's appreciation of animals, but her commentary left me a little confused regarding the point she was trying to make. Check out this story on rgj.com: https://www.rgj.com/story/opinion/voices/2019/10/29/preventing-animal-cruelty-not-attack-pet-ownership-irene-payne/2501544001/
Irene Paynne Published 3:02 p.m. PT Oct. 29, 2019 | Updated 3:04 p.m. PT Oct. 29, 2019
Subscribe: Get local news and views with a subscription to RGJ.com — get 3 months for just $5!
Re: "Washoe attacking animal ownership," Oct. 13:
The Reno "pet shop" she mentions was under investigation and in the news because the owners were accused of "torturing or killing an animal or practicing veterinary medicine without actually being a vet" ("Owners of Reno puppy shop plead not guilty to charges," Sept. 19). Do we seriously want that kind of operation in our city? Most residents would surely say not. It appears Herman was advocating for just that.
More: Attorneys for Puppies Plus owners ask court to dismiss or reduce charges
Washoe County Regional Animal Services (for which Herman sits on the Advisory Board, as do I) does an outstanding job of identifying cruelty and neglect cases in our community and bringing the perpetrator to justice, while caring for the animals involved. Members of the Washoe County Regional Animal Services Advisory Board receive regular updates of the work they do and the challenges they face. Members of the Advisory Board are, at times, left in awe of staff's dedication and resilience.
Personally, I thought Herman felt the same, as she has never voiced an opinion to the contrary during the couple of meetings she has attended over the last few years. Obviously, I was mistaken. Surely if you are in a senior leadership role and have concerns, you speak to the people involved before going to the press to voice your complaints.
I am unclear why Herman believes neutering rescue animals results in shortened lives for dogs. Let's remember that approximately 2.7 million dogs and cats have their lives "shortened" every year because they are killed. Shelters in this country are full and there aren't enough adoptive homes.
Finally, on the subject of "elephants in circuses" and "porpoises at Sea World": As an animal lover, I'm surprised Herman is unaware of the global debate where people have long questioned Sea World's captivity practices. It also speaks to the bigger issue of keeping animals captive for entertainment. Having said that, it is hard to see how this, or any of the examples Herman states can be categorized as "Washoe County waging war against its citizens." As I see it, Washoe County is working hard to protect the community's animals.
Irene Payne is a Washoe County Regional Animal Services Advisory Board member.
More: Reno City Council weighs pet store ban after Puppies Plus owners charged with abuse
Have your say: How to submit an opinion column or letter to the editor
Read or Share this story: https://www.rgj.com/story/opinion/voices/2019/10/29/preventing-animal-cruelty-not-attack-pet-ownership-irene-payne/2501544001/
Renewable energy future limited by onerous regulations | Madison
New Year's resolution: end homelessness in Reno-Sparks | Kazmierski
Home means Nevada to me, but what about addicts? | Bertolina
Repeal of ACA would devastate Indian Country | Torres
If you want peace, stop warmongering | Edwin Lyngar
If you want peace, prepare for war | Sam Kumar


Larger battery than standard vehicle, largest battery out of the whole Mk3 range.
Varta sell OEM equivilants (Varta Silver and Ultra/Stop-Start recommended). The genuine battery is made by Varta anyway.
It is important the Ecomatic is fitted with a large and good quality battery with good CCA (cold cranking amps) rating to ensure the starter motor restarts the engine quickly, and reduce strain on the alternator and electrical consumers, the cost of replacing electronics damaged by voltage fluctuation far exceeds the extra for a good battery, the battery should also be able to take the strain from the large amount of engine starts.
A poorly performing battery can result in oddities with the engine restarting procedure, such as, if the engine has been off for a while, a restart can be unsuccessful or take more than one attempt.
The Ecomatic can be push started.
hope new battery strange brand MAXIS will be good, original is too expensive 155 £ for now.
I bought a Genuine VW 000 915 105 AH battery during the summer (bought off eBay new, I'm not made of money!) and it hasn't let me down. Good job I bought it.
Gave up trying to start the car after a minute or two - It would have started if I had continued for another minute or so but I didn't want to risk burning the starter motor out. The battery was showing no signs of running out of juice though.
it was funny in one store the guy started to argue with me and nothing i said was good for him .
People like this really annoy me. If they actually listened to their customers (from time to time), then they may actually learn something.
Have fun with your new battery, I am sure it will be fine, have you noticed the starter motor turns faster? I did when I replaced mine, much better!


Most interior designers or homeowners believe that they know best when it comes to the interior design and what works well for each room. However, they still make mistakes that are also often made by amateurs. Some follow trends too much, others believe in sets, etc. But what matters is the end result and even though they think that they are doing everything right, they can be wrong.
Before you go out to buy furniture, always measure the space. Most designers neglect to do this because they think that they know their trade well enough to buy pieces just based on a feeling that they have. What usually happens, as a result, is the home turning into this cramped space with no place to move or a space that looks too big and unfinished. Take measures and write them down before you buy.
In case you are a retailer, remind people that they will likely need measures before purchasing anything.
It's easy to think that the cheap furniture will provide the same value as the more expensive one. Designers usually do this when they are limited in terms of budget and they have to conform to it instead of doing what they want. Retailers and designers alike should explain the situation to their customers. "However, investing in a few quality pieces is the best way to go. Cheap furniture will likely break sooner. You have to present this situation to your employers and let them know what are the benefits of buying a few more expensive pieces", – explains Karina Fitzgerald, an Interior design writer at Boom Essays.
If you are decorating a small place, big furniture will just not do. You will just end up with a cramped space. The same goes for dark furniture and the one with heavy materials. You want the home to look bigger, not smaller so pick smaller furniture of lighter materials and colours. As a retailer, you probably often interact with people who want huge pieces – ask them how big their home is. The same goes for people who want smaller pieces.
Everyone gives into the visual aspect of the furniture without thinking about comfort. Beautiful furniture will impress the owners, that's for sure, but after a while, they'll be frustrated with how comfortable it is. While it can still look good, it's imperative that you think about comfort in the first place and beauty can come after. Try it out, see how functional and comfortable it is. Ask your customers how important functionality is to them and let them know if there are any more comfortable pieces.
Furniture looks so great in catalogues, especially when it's all matchy-matchy. But this is not true for real life. Sets can be tacky and not suitable for a space at all. Brenda Durbin, a Design blogger at Ukwritings and Academ Advisor comments: "This is why you need to consider getting pieces of different sets and combining them so that they look good. You can maybe match colours or styles but there are some general rules".
The sofa and the chairs shouldn't be from the same set and the same goes for end tables and the coffee table. If you follow these rules, any room will look amazing and unique. Mix tones, textures and styles. You can also clash materials between the sofa and the pillows – that always has an amazing effect.
Let your customers know that they can go beyond just buying a set – show them combinations that work well together without matching.
Again, not measuring the space will cost you a lot of time and money. As far as rugs go, buying one that's too small is an often enough mistake. This can make your beautifully designed and decorated room look smaller. Rugs should be purchased with care since they are the focal point of a living room, for example. They also make any other room look more comfortable and finished. A general rule is that the front two legs of each piece of the furniture should be on the rug.
People often go for trends and sets or a completely new furniture and forget about their old, beloved pieces. These hold history and they are something that you can't purchase anymore. Try to show the owners that their old furniture can look good. "This is why you should keep them. They add some personality to the space and tell a story that no new piece could tell. Sometimes these old pieces can make new ones look even better and vice versa", – says John Lemons, a Home design writer at Essayroo and Via Writing.
Everyone wants a beautiful home, but not everyone is a designer – that's why people who have some knowledge in this area should steer them in the right direction. Follow these tips whether you are an interior designer or a retailer that often has to help their customers find the perfect furniture for their space.
Freddie Tubbs is blog editor and proofreader at Revieweal. He takes part in online design conferences and webinars and contributes posts to Academized and Paper Fellows blogs.
Buying a set and not being unique is what people mostly make mistakes when buying. Good write up to read.


Ron passed away Oct.30, 2008. He retired to St. George, Utah in 1992 . Had lots of good times with Ron and the rat pack we ran around with. We used to ride our motorcycles back along the railroad tracks that ran by Sylvan Glenn, great fun until Ron flipped his bike and dislocated his shoulder.....Rest in peace Ron, think of you often.
You are visiting the placeholder page for Ronald Roberts. This page is here because someone used our placeholder utility to look for Ronald Roberts. We created this page automatically in hopes Ronald Roberts would find it. If you are not Ronald Roberts, but are an alumni of Okemos High School, register on this site for free now.


Saturday, July 23, 2016: 2:30 pm (Lamarr): The Internet Society is an international, non-profit organization founded in 1992 to provide leadership in Internet-related standards, education, access, and policy. Its mission is to promote the open development, evolution, and use of the Internet for the benefit of all people throughout the world. Their efforts and skills are directly responsible for the streaming and archiving of The Eleventh HOPE, so please help support their efforts and consider starting a chapter in your community. This talk gives a very brief overview of what The Internet Society is all about and we're including it here for free.