text:
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using ImageResizer;
using Nop.Core;
using Nop.Core.Data;
using Nop.Core.Domain.Catalog;
using Nop.Core.Domain.Media;
using Nop.Services.Configuration;
using Nop.Services.Events;
using Nop.Services.Logging;
using Nop.Services.Seo;

namespace Nop.Services.Media
{
    /// <summary>
    /// Picture service
    /// </summary>
    public partial class PictureService : IPictureService
    {
        #region Const

        private const int MULTIPLE_THUMB_DIRECTORIES_LENGTH = 3;

        #endregion

        #region Fields

        private static readonly object s_lock = new object();

        private readonly IRepository<Picture> _pictureRepository;
        private readonly IRepository<ProductPicture> _productPictureRepository;
        private readonly ISettingService _settingService;
        private readonly IWebHelper _webHelper;
        private readonly ILogger _logger;
        private readonly IEventPublisher _eventPublisher;
        private readonly MediaSettings _mediaSettings;

        #endregion

        #region Ctor

        /// <summary>
        /// Ctor
        /// </summary>
        /// <param name="pictureRepository">Picture repository</param>
        /// <param name="productPictureRepository">Product picture repository</param>
        /// <param name="settingService">Setting service</param>
        /// <param name="webHelper">Web helper</param>
        /// <param name="logger">Logger</param>
        /// <param name="eventPublisher">Event publisher</param>
        /// <param name="mediaSettings">Media settings</param>
        public PictureService(IRepository<Picture> pictureRepository,
            IRepository<ProductPicture> productPictureRepository,
            ISettingService settingService, IWebHelper webHelper,
            ILogger logger, IEventPublisher eventPublisher,
            MediaSettings mediaSettings)
        {
            this._pictureRepository = pictureRepository;
            this._productPictureRepository = productPictureRepository;
            this._settingService = settingService;
            this._webHelper = webHelper;
            this._logger = logger;
            this._eventPublisher = eventPublisher;
            this._mediaSettings = mediaSettings;
        }

        #endregion

        #region Utilities

        /// <summary>
        /// Calculates picture dimensions whilst maintaining aspect
        /// </summary>
        /// <param name="originalSize">The original picture size</param>
        /// <param name="targetSize">The target picture size (longest side)</param>
        /// <param name="resizeType">Resize type</param>
        /// <param name="ensureSizePositive">A value indicatingh whether we should ensure that size values are positive</param>
        /// <returns></returns>
        protected virtual Size CalculateDimensions(Size originalSize, int targetSize,
            ResizeType resizeType = ResizeType.LongestSide, bool ensureSizePositive = true)
        {
            var newSize = new Size();
            switch (resizeType)
            {
                case ResizeType.LongestSide:
                    if (originalSize.Height > originalSize.Width)
                    {
                        // portrait
                        newSize.Width = (int)(originalSize.Width * (float)(targetSize / (float)originalSize.Height));
                        newSize.Height = targetSize;
                    }
                    else
                    {
                        // landscape or square
                        newSize.Height = (int)(originalSize.Height * (float)(targetSize / (float)originalSize.Width));
                        newSize.Width = targetSize;
                    }
                    break;
                case ResizeType.Width:
                    newSize.Height = (int)(originalSize.Height * (float)(targetSize / (float)originalSize.Width));
                    newSize.Width = targetSize;
                    break;
                case ResizeType.Height:
                    newSize.Width = (int)(originalSize.Width * (float)(targetSize / (float)originalSize.Height));
                    newSize.Height = targetSize;
                    break;
                default:
                    throw new Exception("Not supported ResizeType");
            }

            if (ensureSizePositive)
            {
                if (newSize.Width < 1)
                    newSize.Width = 1;
                if (newSize.Height < 1)
                    newSize.Height = 1;
            }

            return newSize;
        }

        /// <summary>
        /// Returns the file extension from mime type.
        /// </summary>
        /// <param name="mimeType">Mime type</param>
        /// <returns>File extension</returns>
        protected virtual string GetFileExtensionFromMimeType(string mimeType)
        {
            if (mimeType == null)
                return null;

            //also see System.Web.MimeMapping for more mime types

            string[] parts = mimeType.Split('/');
            string lastPart = parts[parts.Length - 1];
            switch (lastPart)
            {
                case "pjpeg":
                    lastPart = "jpg";
                    break;
                case "x-png":
                    lastPart = "png";
                    break;
                case "x-icon":
                    lastPart = "ico";
                    break;
            }
            return lastPart;
        }

        /// <summary>
        /// Loads a picture from file
        /// </summary>
        /// <param name="pictureId">Picture identifier</param>
        /// <param name="mimeType">MIME type</param>
        /// <returns>Picture binary</returns>
        protected virtual byte[] LoadPictureFromFile(int pictureId, string mimeType)
        {
            string lastPart = GetFileExtensionFromMimeType(mimeType);
            string fileName = string.Format("{0}_0.{1}", pictureId.ToString("0000000"), lastPart);
            var filePath = GetPictureLocalPath(fileName);
            if (!File.Exists(filePath))
                return new byte[0];
            return File.ReadAllBytes(filePath);
        }

        /// <summary>
        /// Save picture on file system
        /// </summary>
        /// <param name="pictureId">Picture identifier</param>
        /// <param name="pictureBinary">Picture binary</param>
        /// <param name="mimeType">MIME type</param>
        protected virtual void SavePictureInFile(int pictureId, byte[] pictureBinary, string mimeType)
        {
            string lastPart = GetFileExtensionFromMimeType(mimeType);
            string fileName = string.Format("{0}_0.{1}", pictureId.ToString("0000000"), lastPart);
            File.WriteAllBytes(GetPictureLocalPath(fileName), pictureBinary);
        }

        /// <summary>
        /// Delete a picture on file system
        /// </summary>
        /// <param name="picture">Picture</param>
        protected virtual void DeletePictureOnFileSystem(Picture picture)
        {
            if (picture == null)
                throw new ArgumentNullException("picture");

            string lastPart = GetFileExtensionFromMimeType(picture.MimeType);
            string fileName = string.Format("{0}_0.{1}", picture.Id.ToString("0000000"), lastPart);
            string filePath = GetPictureLocalPath(fileName);
            if (File.Exists(filePath))
            {
                File.Delete(filePath);
            }
        }

        /// <summary>
        /// Delete picture thumbs
        /// </summary>
        /// <param name="picture">Picture</param>
        protected virtual void DeletePictureThumbs(Picture picture)
        {
            string filter = string.Format("{0}*.*", picture.Id.ToString("0000000"));
            var thumbDirectoryPath = _webHelper.MapPath("~/content/images/thumbs");
            string[] currentFiles = System.IO.Directory.GetFiles(thumbDirectoryPath, filter, SearchOption.AllDirectories);
            foreach (string currentFileName in currentFiles)
            {
                var thumbFilePath = GetThumbLocalPath(currentFileName);
                File.Delete(thumbFilePath);
            }
        }

        /// <summary>
        /// Get picture (thumb) local path
        /// </summary>
        /// <param name="thumbFileName">Filename</param>
        /// <returns>Local picture thumb path</returns>
        protected virtual string GetThumbLocalPath(string thumbFileName)
        {
            var thumbsDirectoryPath = _webHelper.MapPath("~/content/images/thumbs");
            if (_mediaSettings.MultipleThumbDirectories)
            {
                //get the first two letters of the file name
                var fileNameWithoutExtension = Path.GetFileNameWithoutExtension(thumbFileName);
                if (fileNameWithoutExtension != null && fileNameWithoutExtension.Length > MULTIPLE_THUMB_DIRECTORIES_LENGTH)
                {
                    var subDirectoryName = fileNameWithoutExtension.Substring(0, MULTIPLE_THUMB_DIRECTORIES_LENGTH);
                    thumbsDirectoryPath = Path.Combine(thumbsDirectoryPath, subDirectoryName);
                    if (!System.IO.Directory.Exists(thumbsDirectoryPath))
                    {
                        System.IO.Directory.CreateDirectory(thumbsDirectoryPath);
                    }
                }
            }
            var thumbFilePath = Path.Combine(thumbsDirectoryPath, thumbFileName);
            return thumbFilePath;
        }

        /// <summary>
        /// Get picture (thumb) URL
        /// </summary>
        /// <param name="thumbFileName">Filename</param>
        /// <param name="storeLocation">Store location URL; null to use determine the current store location automatically</param>
        /// <returns>Local picture thumb path</returns>
        protected virtual string GetThumbUrl(string thumbFileName, string storeLocation = null)
        {
            storeLocation = !String.IsNullOrEmpty(storeLocation)
                                    ? storeLocation
                                    : _webHelper.GetStoreLocation();
            var url = storeLocation + "content/images/thumbs/";

            if (_mediaSettings.MultipleThumbDirectories)
            {
                //get the first two letters of the file name
                var fileNameWithoutExtension = Path.GetFileNameWithoutExtension(thumbFileName);
                if (fileNameWithoutExtension != null && fileNameWithoutExtension.Length > MULTIPLE_THUMB_DIRECTORIES_LENGTH)
                {
                    var subDirectoryName = fileNameWithoutExtension.Substring(0, MULTIPLE_THUMB_DIRECTORIES_LENGTH);
                    url = url + subDirectoryName + "/";
                }
            }

            url = url + thumbFileName;
            return url;
        }

        /// <summary>
        /// Get picture local path. Used when images stored on file system (not in the database)
        /// </summary>
        /// <param name="fileName">Filename</param>
        /// <param name="imagesDirectoryPath">Directory path with images; if null, then default one is used</param>
        /// <returns>Local picture path</returns>
        protected virtual string GetPictureLocalPath(string fileName, string imagesDirectoryPath = null)
        {
            if (String.IsNullOrEmpty(imagesDirectoryPath))
            {
                imagesDirectoryPath = _webHelper.MapPath("~/content/images/");
            }
            var filePath = Path.Combine(imagesDirectoryPath, fileName);
            return filePath;
        }

        /// <summary>
        /// Gets the loaded picture binary depending on picture storage settings
        /// </summary>
        /// <param name="picture">Picture</param>
        /// <param name="fromDb">Load from database; otherwise, from file system</param>
        /// <returns>Picture binary</returns>
        protected virtual byte[] LoadPictureBinary(Picture picture, bool fromDb)
        {
            if (picture == null)
                throw new ArgumentNullException("picture");

            var result = fromDb
                ? picture.PictureBinary
                : LoadPictureFromFile(picture.Id, picture.MimeType);
            return result;
        }

        #endregion

        #region Getting picture local path/URL methods

        /// <summary>
        /// Gets the loaded picture binary depending on picture storage settings
        /// </summary>
        /// <param name="picture">Picture</param>
        /// <returns>Picture binary</returns>
        public virtual byte[] LoadPictureBinary(Picture picture)
        {
            return LoadPictureBinary(picture, this.StoreInDb);
        }

        /// <summary>
        /// Get picture SEO friendly name
        /// </summary>
        /// <param name="name">Name</param>
        /// <returns>Result</returns>
        public virtual string GetPictureSeName(string name)
        {
            return SeoExtensions.GetSeName(name, true, false);
        }

        /// <summary>
        /// Gets the default picture URL
        /// </summary>
        /// <param name="targetSize">The target picture size (longest side)</param>
        /// <param name="defaultPictureType">Default picture type</param>
        /// <param name="storeLocation">Store location URL; null to use determine the current store location automatically</param>
        /// <returns>Picture URL</returns>
        public virtual string GetDefaultPictureUrl(int targetSize = 0,
            PictureType defaultPictureType = PictureType.Entity,
            string storeLocation = null)
        {
            string defaultImageFileName;
            switch (defaultPictureType)
            {
                case PictureType.Entity:
                    defaultImageFileName = _settingService.GetSettingByKey("Media.DefaultImageName", "default-image.gif");
                    break;
                case PictureType.Avatar:
                    defaultImageFileName = _settingService.GetSettingByKey("Media.Customer.DefaultAvatarImageName", "default-avatar.jpg");
                    break;
                default:
                    defaultImageFileName = _settingService.GetSettingByKey("Media.DefaultImageName", "default-image.gif");
                    break;
            }

            string filePath = GetPictureLocalPath(defaultImageFileName,
                imagesDirectoryPath: _settingService.GetSettingByKey<string>("Media.DefaultImageDirectoryPath"));

            if (!File.Exists(filePath))
            {
                return "";
            }
            if (targetSize == 0)
            {
                string url = (!String.IsNullOrEmpty(storeLocation)
                                 ? storeLocation
                                 : _webHelper.GetStoreLocation())
                                 + "content/images/" + defaultImageFileName;
                return url;
            }
            else
            {
                string fileExtension = Path.GetExtension(filePath);
                string thumbFileName = string.Format("{0}_{1}{2}",
                    Path.GetFileNameWithoutExtension(filePath),
                    targetSize,
                    fileExtension);
                var thumbFilePath = GetThumbLocalPath(thumbFileName);
                if (!File.Exists(thumbFilePath))
                {
                    using (var b = new Bitmap(filePath))
                    {
                        var newSize = CalculateDimensions(b.Size, targetSize);

                        var destStream = new MemoryStream();
                        ImageBuilder.Current.Build(b, destStream, new ResizeSettings
                        {
                            Width = newSize.Width,
                            Height = newSize.Height,
                            Scale = ScaleMode.Both,
                            Quality = _mediaSettings.DefaultImageQuality
                        });
                        var destBinary = destStream.ToArray();
                        File.WriteAllBytes(thumbFilePath, destBinary);
                    }
                }
                var url = GetThumbUrl(thumbFileName, storeLocation);
                return url;
            }
        }

        /// <summary>
        /// Get a picture URL
        /// </summary>
        /// <param name="pictureId">Picture identifier</param>
        /// <param name="targetSize">The target picture size (longest side)</param>
        /// <param name="showDefaultPicture">A value indicating whether the default picture is shown</param>
        /// <param name="storeLocation">Store location URL; null to use determine the current store location automatically</param>
        /// <param name="defaultPictureType">Default picture type</param>
        /// <returns>Picture URL</returns>
        public virtual string GetPictureUrl(int pictureId,
            int targetSize = 0,
            bool showDefaultPicture = true,
            string storeLocation = null,
            PictureType defaultPictureType = PictureType.Entity)
        {
            var picture = GetPictureById(pictureId);
            return GetPictureUrl(picture, targetSize, showDefaultPicture, storeLocation, defaultPictureType);
        }

        /// <summary>
        /// Get a picture URL
        /// </summary>
        /// <param name="picture">Picture instance</param>
        /// <param name="targetSize">The target picture size (longest side)</param>
        /// <param name="showDefaultPicture">A value indicating whether the default picture is shown</param>
        /// <param name="storeLocation">Store location URL; null to use determine the current store location automatically</param>
        /// <param name="defaultPictureType">Default picture type</param>
        /// <returns>Picture URL</returns>
        public virtual string GetPictureUrl(Picture picture,
            int targetSize = 0,
            bool showDefaultPicture = true,
            string storeLocation = null,
            PictureType defaultPictureType = PictureType.Entity)
        {
            string url = string.Empty;
            byte[] pictureBinary = null;
            if (picture != null)
                pictureBinary = LoadPictureBinary(picture);
            if (picture == null || pictureBinary == null || pictureBinary.Length == 0)
            {
                if(showDefaultPicture)
                {
                    url = GetDefaultPictureUrl(targetSize, defaultPictureType, storeLocation);
                }
                return url;
            }

            string lastPart = GetFileExtensionFromMimeType(picture.MimeType);
            string thumbFileName;
            if (picture.IsNew)
            {
                DeletePictureThumbs(picture);

                //we do not validate picture binary here to ensure that no exception ("Parameter is not valid") will be thrown
                picture = UpdatePicture(picture.Id,
                    pictureBinary,
                    picture.MimeType,
                    picture.SeoFilename,
                    false,
                    false);
            }
            lock (s_lock)
            {
                string seoFileName = picture.SeoFilename; // = GetPictureSeName(picture.SeoFilename); //just for sure
                if (targetSize == 0)
                {
                    thumbFileName = !String.IsNullOrEmpty(seoFileName) ?
                        string.Format("{0}_{1}.{2}", picture.Id.ToString("0000000"), seoFileName, lastPart) :
                        string.Format("{0}.{1}", picture.Id.ToString("0000000"), lastPart);
                    var thumbFilePath = GetThumbLocalPath(thumbFileName);
                    if (!File.Exists(thumbFilePath))
                    {
                        File.WriteAllBytes(thumbFilePath, pictureBinary);
                    }
                }
                else
                {
                    thumbFileName = !String.IsNullOrEmpty(seoFileName) ?
                        string.Format("{0}_{1}_{2}.{3}", picture.Id.ToString("0000000"), seoFileName, targetSize, lastPart) :
                        string.Format("{0}_{1}.{2}", picture.Id.ToString("0000000"), targetSize, lastPart);
                    var thumbFilePath = GetThumbLocalPath(thumbFileName);
                    if (!File.Exists(thumbFilePath))
                    {
                        using (var stream = new MemoryStream(pictureBinary))
                        {
                            Bitmap b = null;
                            try
                            {
                                //try-catch to ensure that picture binary is really OK. Otherwise, we can get "Parameter is not valid" exception if binary is corrupted for some reasons
                                b = new Bitmap(stream);
                            }
                            catch (ArgumentException exc)
                            {
                                _logger.Error(string.Format("Error generating picture thumb. ID={0}", picture.Id), exc);
                            }
                            if (b == null)
                            {
                                //bitmap could not be loaded for some reasons
                                return url;
                            }

                            var newSize = CalculateDimensions(b.Size, targetSize);

                            var destStream = new MemoryStream();
                            ImageBuilder.Current.Build(b, destStream, new ResizeSettings
                            {
                                Width = newSize.Width,
                                Height = newSize.Height,
                                Scale = ScaleMode.Both,
                                Quality = _mediaSettings.DefaultImageQuality
                            });
                            var destBinary = destStream.ToArray();
                            File.WriteAllBytes(thumbFilePath, destBinary);

                            b.Dispose();
                        }
                    }
                }
            }
            url = GetThumbUrl(thumbFileName, storeLocation);
            return url;
        }

        /// <summary>
        /// Get a picture local path
        /// </summary>
        /// <param name="picture">Picture instance</param>
        /// <param name="targetSize">The target picture size (longest side)</param>
        /// <param name="showDefaultPicture">A value indicating whether the default picture is shown</param>
        /// <returns></returns>
        public virtual string GetThumbLocalPath(Picture picture, int targetSize = 0, bool showDefaultPicture = true)
        {
            string url = GetPictureUrl(picture, targetSize, showDefaultPicture);
            if(String.IsNullOrEmpty(url))
                return String.Empty;

            return GetThumbLocalPath(Path.GetFileName(url));
        }

        #endregion

        #region CRUD methods

        /// <summary>
        /// Gets a picture
        /// </summary>
        /// <param name="pictureId">Picture identifier</param>
        /// <returns>Picture</returns>
        public virtual Picture GetPictureById(int pictureId)
        {
            if (pictureId == 0)
                return null;

            return _pictureRepository.GetById(pictureId);
        }

        /// <summary>
        /// Deletes a picture
        /// </summary>
        /// <param name="picture">Picture</param>
        public virtual void DeletePicture(Picture picture)
        {
            if (picture == null)
                throw new ArgumentNullException("picture");

            //delete thumbs
            DeletePictureThumbs(picture);

            //delete from file system
            if (!this.StoreInDb)
                DeletePictureOnFileSystem(picture);

            //delete from database
            _pictureRepository.Delete(picture);

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

        /// <summary>
        /// Gets a collection of pictures
        /// </summary>
        /// <param name="pageIndex">Current page</param>
        /// <param name="pageSize">Items on each page</param>
        /// <returns>Paged list of pictures</returns>
        public virtual IPagedList<Picture> GetPictures(int pageIndex, int pageSize)
        {
            var query = from p in _pictureRepository.Table
                       orderby p.Id descending
                       select p;
            var pics = new PagedList<Picture>(query, pageIndex, pageSize);
            return pics;
        }

        /// <summary>
        /// Gets pictures by product identifier
        /// </summary>
        /// <param name="productId">Product identifier</param>
        /// <param name="recordsToReturn">Number of records to return. 0 if you want to get all items</param>
        /// <returns>Pictures</returns>
        public virtual IList<Picture> GetPicturesByProductId(int productId, int recordsToReturn = 0)
        {
            if (productId == 0)
                return new List<Picture>();

            var query = from p in _pictureRepository.Table
                        join pp in _productPictureRepository.Table on p.Id equals pp.PictureId
                        orderby pp.DisplayOrder
                        where pp.ProductId == productId
                        select p;

            if (recordsToReturn > 0)
                query = query.Take(recordsToReturn);

            var pics = query.ToList();
            return pics;
        }

        /// <summary>
        /// Inserts a picture
        /// </summary>
        /// <param name="pictureBinary">The picture binary</param>
        /// <param name="mimeType">The picture MIME type</param>
        /// <param name="seoFilename">The SEO filename</param>
        /// <param name="isNew">A value indicating whether the picture is new</param>
        /// <param name="validateBinary">A value indicating whether to validated provided picture binary</param>
        /// <returns>Picture</returns>
        public virtual Picture InsertPicture(byte[] pictureBinary, string mimeType, string seoFilename,
            bool isNew, bool validateBinary = true)
        {
            mimeType = CommonHelper.EnsureNotNull(mimeType);
            mimeType = CommonHelper.EnsureMaximumLength(mimeType, 20);

            seoFilename = CommonHelper.EnsureMaximumLength(seoFilename, 100);

            if (validateBinary)
                pictureBinary = ValidatePicture(pictureBinary, mimeType);

            var picture = new Picture
                              {
                                  PictureBinary = this.StoreInDb ? pictureBinary : new byte[0],
                                  MimeType = mimeType,
                                  SeoFilename = seoFilename,
                                  IsNew = isNew,
                              };
            _pictureRepository.Insert(picture);

            if(!this.StoreInDb)
                SavePictureInFile(picture.Id, pictureBinary, mimeType);

            //event notification
            _eventPublisher.EntityInserted(picture);

            return picture;
        }

        /// <summary>
        /// Updates the picture
        /// </summary>
        /// <param name="pictureId">The picture identifier</param>
        /// <param name="pictureBinary">The picture binary</param>
        /// <param name="mimeType">The picture MIME type</param>
        /// <param name="seoFilename">The SEO filename</param>
        /// <param name="isNew">A value indicating whether the picture is new</param>
        /// <param name="validateBinary">A value indicating whether to validated provided picture binary</param>
        /// <returns>Picture</returns>
        public virtual Picture UpdatePicture(int pictureId, byte[] pictureBinary, string mimeType,
            string seoFilename, bool isNew, bool validateBinary = true)
        {
            mimeType = CommonHelper.EnsureNotNull(mimeType);
            mimeType = CommonHelper.EnsureMaximumLength(mimeType, 20);

            seoFilename = CommonHelper.EnsureMaximumLength(seoFilename, 100);

            if (validateBinary)
                pictureBinary = ValidatePicture(pictureBinary, mimeType);

            var picture = GetPictureById(pictureId);
            if (picture == null)
                return null;

            //delete old thumbs if a picture has been changed
            if (seoFilename != picture.SeoFilename)
                DeletePictureThumbs(picture);

            picture.PictureBinary = (this.StoreInDb ? pictureBinary : new byte[0]);
            picture.MimeType = mimeType;
            picture.SeoFilename = seoFilename;
            picture.IsNew = isNew;

            _pictureRepository.Update(picture);

            if(!this.StoreInDb)
                SavePictureInFile(picture.Id, pictureBinary, mimeType);

            //event notification
            _eventPublisher.EntityUpdated(picture);

            return picture;
        }

        /// <summary>
        /// Updates a SEO filename of a picture
        /// </summary>
        /// <param name="pictureId">The picture identifier</param>
        /// <param name="seoFilename">The SEO filename</param>
        /// <returns>Picture</returns>
        public virtual Picture SetSeoFilename(int pictureId, string seoFilename)
        {
            var picture = GetPictureById(pictureId);
            if (picture == null)
                throw new ArgumentException("No picture found with the specified id");

            //update if it has been changed
            if (seoFilename != picture.SeoFilename)
            {
                //update picture
                picture = UpdatePicture(picture.Id, LoadPictureBinary(picture), picture.MimeType, seoFilename, true, false);
            }
            return picture;
        }

        /// <summary>
        /// Validates input picture dimensions
        /// </summary>
        /// <param name="pictureBinary">Picture binary</param>
        /// <param name="mimeType">MIME type</param>
        /// <returns>Picture binary or throws an exception</returns>
        public virtual byte[] ValidatePicture(byte[] pictureBinary, string mimeType)
        {
            var destStream = new MemoryStream();
            ImageBuilder.Current.Build(pictureBinary, destStream, new ResizeSettings
            {
                MaxWidth = _mediaSettings.MaximumImageSize,
                MaxHeight = _mediaSettings.MaximumImageSize,
                Quality = _mediaSettings.DefaultImageQuality
            });
            return destStream.ToArray();
        }

        #endregion

        #region Properties

        /// <summary>
        /// Gets or sets a value indicating whether the images should be stored in data base.
        /// </summary>
        public virtual bool StoreInDb
        {
            get
            {
                return _settingService.GetSettingByKey("Media.Images.StoreInDB", true);
            }
            set
            {
                //check whether it's a new value
                if (this.StoreInDb != value)
                {
                    //save the new setting value
                    _settingService.SetSetting("Media.Images.StoreInDB", value);

                    //update all picture objects
                    var pictures = this.GetPictures(0, int.MaxValue);
                    foreach (var picture in pictures)
                    {
                        var pictureBinary = LoadPictureBinary(picture, !value);

                        //delete from file system
                        if (value)
                            DeletePictureOnFileSystem(picture);

                        //just update a picture (all required logic is in UpdatePicture method)
                        UpdatePicture(picture.Id,
                                      pictureBinary,
                                      picture.MimeType,
                                      picture.SeoFilename,
                                      true,
                                      false);
                        //we do not validate picture binary here to ensure that no exception ("Parameter is not valid") will be thrown when "moving" pictures
                    }
                }
            }
        }

        #endregion
    }
}


text:
£240k funding package announced for voluntary Search and Rescue groups
Wednesday, December 21st, 2016
Justice Minister Claire Sugden has announced an immediate pre-Christmas £240,000 capital funding package for voluntary Search and Rescue groups in Northern Ireland. The groups deliver assistance to the emergency services and directly to the community. They provide lifesaving search and rescue on inland waterways, mountains and caves. They also provide a specialist search dog facility and support civil aviation with a sky watch service.
Speaking to Newry Times, Minister Claire Sugden said, "This vital funding package of £240,000 will immediately benefit the voluntary Search and Rescue teams who, around the clock, are ready to answer calls from people in distress. "In the first six months of this year, volunteers responded to around 250 incidents, and contributed around 10,000 operational hours. Their dedication, enthusiasm and courage is outstanding." Article continues below: The Minister also acknowledged the support the Search and Rescue groups receive from public donations. "I recognise and thank the community who generously continue to support our Search and Rescue groups and help them successfully make our waterways, towns and countryside much safer." The funding will be distributed between voluntary Search and Rescue groups who provide assistance to the statutory tasking authorities.

redpajama_set_name: RedPajamaCommonCrawl


text:
Home Solar News Worldwide Energy And Manufacturing Notes Solar Module Contract Backlog
Worldwide Energy And Manufacturing Notes Solar Module Contract Backlog
Worldwide Energy and Manufacturing USA Inc. says that its solar division has a backlog of $52 million in solar module contracts. To date, Worldwide has signed approximately $90 million in new contracts, the majority of which are expected to be recorded during the 2009 calendar year.
'Our solar division continues to obtain new module contracts from new customers, as well as existing customers, demonstrating our ability to retain customers as well to gain new customers in the renewable energy market despite the temporary downturn on the worldwide demand for renewable alternative energy consumption,' says Jimmy Wang, the company's CEO.
'We are very encouraged by the achievement we have made and anticipate another triple-digit growth for our solar business this year,' he adds.
SOURCE: Worldwide Energy And Manufacturing USA


Atlanta, GA – Christopher Conner has been in the franchise industry since 2002 working with several hundred different franchise systems in management, franchise sales and franchise development work. His experience ranges across all fields of franchise expertise with a focus in franchise marketing and franchise sales but includes work in franchise strategic planning, franchise research and franchise operations consulting.
Chris Conner has worked with multiple International franchise and licensed organizations throughout the United States, Middle East, India and Europe. In these International expansion programs, he played a pivotal role in developing the program, putting together documentation and marketing franchises to Domestic and International buyers. Franchise Marketing Systems is currently working with several International companies in developing and managing independent distribution channels throughout the globe.
Chris Conner has worked with many diverse independent distribution systems including service franchises, sales franchise systems, retail franchise concepts, restaurant franchise systems, fitness franchise companies and multiple International franchise organizations.
After almost a decade in the franchise development field, Mr. Conner saw an opportunity to change the way franchise systems were taken to market by offering a performance-based franchise development strategy. When Franchise Marketing Systems came to the market, the franchise development model was unique to the industry in that the business model relied heavily on a performance basis to market and sell the brands that were developed.
Mr. Conner's firm, Franchise Marketing Systems has been involved in over 2,000 franchise sales for new and existing franchise brands since 2009. The targeted approach of Franchise Marketing Systems to provide outside franchise sales support and sales services has proven effective enough to launch over 200 new franchise brands in the U.S. and abroad. Since the company's launch, FMS has been involved in over one hundred first franchise sales on new brands with no pre-existing franchise units. The franchise consulting model was proven to be uniquely positioned to offer a significantly higher rate of success than traditional franchise development mediums.
Mr. Conner was able to coordinate experienced franchise consultants in necessary fields to provide the core development work. Franchise Strategic Planning, Market Research, Franchise Operations Consulting, Franchise Marketing Development, Franchise Web Marketing Development and legal is referred to a group of qualified Franchise Attorneys and law firms. The model was structured to offer efficiency and a reasonable cost structure to support the use of funds for marketing, sales and franchise promotion and successfully allow a brand to go to market.


text:
THE Docket
News of note from Fordham Law alumni
By Erin DeGregorio and Sejla Rizvic
When Andy Hinton '89 began his law career, he started out in litigation, first at Cravath, Swaine & Moore, then as a U.S. assistant attorney for nearly a decade. It's not that he yearned to be in the courtroom, he says. Mostly, he wasn't quite sure what else lawyers did. "There were no lawyers
in my family," says Hinton. "My experience of lawyers was, you know, Matlock and Perry Mason."
Hinton, who eventually found his way to the world of corporate compliance at GE and Google, couldn't have foreseen that he would one day be involved in a tech platform to report workplace misconduct in a brand-new way.
He now sits on the advisory board of #NotMe, a mobile app and platform that allows anyone to report workplace misconduct, putting the focus on the employee and their needs, rather than on the corporation. Traditional employee helplines, Hinton says, are set up simply to collect facts efficiently, without much regard for how employees feel. "From the employee's perspective, it can seem like the point of the helpline is to gather enough information to help the company conclude that an allegation is unsupported. It can feel biased and unfair."
Those who raise concerns through #NotMe, he says, have an opportunity to talk about how these incidents have affected them in a way that goes beyond who, what, where, and why.
"What we hear from our clients is that there is an increasing level of trust associated with #NotMe that just wasn't in place with other efforts," says Hinton. "The companies need information, but our aim is to be as supportive as possible to any employee who experiences misconduct."
"I'd like to think there's only more we can do in terms of equity."
From Bengaluru to the City Bar
Ramya Jawahar Kudekallu, LL.M., '18 has never been one to shy away from speaking up or rising to a challenge. But when the Bengaluru, India, native was invited to become chair of the New York City Bar Association's International Human Rights Committee in October 2021, she was a bit taken aback. "Typically, most chairs are quite older or have more experience," says Kudekallu, 32, a visiting instructor of clinical law at Cardozo School of Law.
Indeed, Kudekallu is one of the youngest people to ever hold the position, and the first woman of color to do so.
Breaking those barriers, she says, is a good sign for the bar and for greater equity in the future. "I'd like to think there's only more we can do in terms of equity," she says.
During her three-year-long tenure, Kudekallu will focus on strengthening and promoting adherence to international human rights law, as well as raising awareness around different human rights challenges. She also hopes to bring attention to matters that she has focused on throughout her career, including the labor rights of sex workers and the rights of stateless individuals and those at risk of statelessness due to legislative changes or shifting political contexts. As she told The Times of India, this kind of work was ingrained in her by her family. "I was taught not to ignore problems of society and, more importantly, [that] I must reflect on my own role and privilege."
When Alejandro Cremades, LL.M., '09 attended his first New York Tech Meetup a year after graduating from Fordham Law, he was the only person in the audience wearing a suit and tie. "It was super hot that night," recalls Cremades, who quickly took off his jacket and began networking with entrepreneurs and founders around the room, developing the seeds of what would become the business model behind his company, RockThePost. He was immediately hooked on the idea of people pitching their ideas and getting feedback on the spot, while others chimed in with their own opinions.
RockThePost, eventually rebranded as OneVest, connects startups with investors, and now has a membership of more than 500,000 entrepreneurs in 234 countries. In 2018, it was acquired by a media corporation in a multimillion-dollar transaction that was surprisingly emotional, says Cremades. "It's kind of a grieving process where you feel like you've lost someone you really loved and, to a certain degree, a sense of purpose," he says. He detailed this process in a new book titled Selling Your Startup: Crafting the Perfect Exit, Selling Your Business, and Everything Else Entrepreneurs Need to Know (Wiley, July 2021), a follow-up to his best seller The Art of Startup Fundraising: Pitching Investors, Negotiating the Deal, and Everything Else Entrepreneurs Need to Know (Wiley, April 2016).
"The Law School placed a bet on me, accepting me when I was just 22 years old after graduating from law school in Spain," Cremades says. "It's always going to be in my heart."
Beating Cancer a Second Time
A new memoir from Christine Shields Corrigan '91, Again: Surviving Cancer Twice with Love and Lists (Koehler Books, October 2020), weaves together her teen and adult experiences following her diagnoses of Hodgkin's disease at age 14 and breast cancer 35 years later in 2016. "Again got its start in a monthly support group, when the nurse there asked me to write a list of helpful tips and tricks that she could share with her patients, from a patient's perspective," Corrigan, 49, explains. "When I walked out of that meeting, I thought, What am I going to tell somebody else who's in the middle of this?—because I was trying to get through it too."
Corrigan's bullet points turned into 10 interwoven reflective essays offering guidance and advice for readers on finding the strength to forge a path beyond a cancer diagnosis. Those essays became the starting point for Again. She'd never written a book before, so Corrigan tapped into what she did know—how to write a compelling legal brief from her decade-long experiences as a labor and employment law attorney. "A journalist turned lawyer I worked with once told me that a brief should read like a well-written piece of journalism or, better yet, a story," Corrigan recalls. "All of those workplace law and discrimination complaints I dealt with were ultimately somebody's story—complete with a protagonist, antagonist, and narrative arc. That was the best piece of writing advice I ever got."
Sleepless in Colorado
Tom McCaffrey '84 always had an interest in writing, but after his first child was born, he realized he would need a more stable source of income. That's when he enrolled at Fordham Law and began a long career in entertainment law, eventually partnering with Robert Meloni to form Meloni & McCaffrey APC in New York.
Except the itch to write never really went away. After moving from New York to Colorado, McCaffrey found himself waking up at 2 a.m. every night, unable to adjust to the time zone change.
"That's when I started to write the novel," he says. "Within three months, I had a draft done."
Called The Wise Ass, the novel was published by Black Rose Writing in 2021, and centers on the strange and fantastical adventures of a mob lawyer who is forced into witness protection, with appearances by a magical mule named Claire, along with ghosts, witches, and extraterrestrials. ("This is Grisham on mushrooms," says the cover blurb.)
The story is inspired by an offer McCaffrey received back in the 1990s. "I can't talk more about it," he says, "but I always wondered what my life would have been like if I had taken that job."
The book quickly became an Amazon best seller in the "dark humor" and "legal thriller" categories, and McCaffrey has just published the second novel, An Alien Appeal, in what will be a series.
McCaffrey has no regrets about not starting his writing career sooner. "If I hadn't been a lawyer, this book never would have been written," he says. "I couldn't have broken into novel writing if I didn't have this life."
Worthy Work
Mark Torres '08 is interested in workers—both as general counsel of the Teamsters Local Union 810 in Queens and as a writer. He's the author of two crime novels and a children's book about labor unions, and his newest work is a history titled Long Island Migrant Labor Camps: Dust for Blood (Arcadia Publishing, March 2021).
"I don't want to simply retell things," Torres says. "I want to tell things from the workers' perspective … those stories that cry for justice."
Torres discovered that there were hundreds of migrant labor camps on Long Island from the 1940s through the end of the 20th century, supplying workers for potato farms in the region. His book is the first to cover this subject. Camp life, he explains, was violent and camp operators deducted expenses from workers' paychecks—including the bus that brought them to the camps and the cost of their housing in Riverhead, where many lived in squalor or died in fires from kerosene heaters or stoves.
The project became even bigger than he imagined, says Torres, who dug into more than 300 newspaper articles and several documentaries, and interviewed close to 40 people, including migrant workers and their families, farmers, those in the agricultural industry, journalists, advocates, historians, government officials, and law enforcement and other first responders. "I felt the forces of history nudging me along to make sure I completed this work."
"In retrospect, the migratory labor system practiced in Suffolk County during the 20th century is representative of an industry where profit was paramount and exploitation all too common," Torres says. "That this system thrived for as long as it did in one of the most affluent counties in the country is a shameful legacy."
Ice Cream Queen
In 2010, after completing a clerkship for Judge Denny Chin '78, Victoria Lai '08 did something unusual for a newly minted attorney: She took a job as a pie shop apprentice at Four & Twenty Blackbirds in Brooklyn. Lai threw her heart into it, even purchasing a used ice cream maker and convincing the owners to sell their pies with scoops of her homemade flavors. The same day the owners agreed, she received a call from Alejandro Mayorkas, director of U.S. Citizenship and Immigration Services, offering her a position as a counselor at USCIS for the Obama administration.
"It was my dream job," Lai says. "I knew I had to go to Washington, D.C." Yet she was loath to give up on ice cream. "I made four flavors a week and blogged about them to get this crazy hobby out of my system," she explains. "But I got even more excited about it."
In 2014, Lai left her job to launch a shop of her own, Ice Cream Jubilee, with stores in Virginia and Washington, D.C., where Lai's product has been voted "Best Ice Cream" seven years in a row. She also won a Battle of the Bites award on The Drew Barrymore Show in March 2021.
Perhaps surprisingly, Lai says that her legal education and experience come into play all the time. "Being able to read and understand documents like leases and business insurance requirements gives me greater confidence to take risks and grow my business."
Ice Cream Jubilee's flavors are available for nationwide shipping and can be purchased at all Whole Foods Markets in the mid-Atlantic region. Lai is hopeful that her products will debut in the New York area next year.
From Self-Advocate to CEO
DeNora Getachew '05 began her advocacy work early on—by advocating for herself. "I was a young, pregnant girl at a public high school in New York City," she says. "But I was able to find my own voice and really advocate for the chance to continue my studies in an academically rigorous environment, rather than transfer to a high school for pregnant girls."
She kept using her voice for advocacy after Fordham Law, as a campaign manager and legislative counsel for the Brennan Center for Justice. Later, she served as the New York City executive director of Generation Citizen, an organization that empowers young people to be politically engaged. Now, as CEO of DoSomething.org, an online platform that helps young people organize around volunteer opportunities and social change initiatives, she's helping others participate in causes they believe in.
"I came on board as CEO in April of 2021 to figure out what the future of DoSomething.org could look like," says Getachew. One hint: Gen Z and Gen Alpha members are using the platform to tackle issues like voter registration, mental health care access, educational changes, and racial justice.
"I've done the work to fight for equitable, representative democracy, and for young people," says Getachew. "But it's all grounded in my own story of being a young person and having to fight for myself."
Doing Justice in Ghana
"My stay at Fordham really heightened my awareness of social justice and public service work," says Diana Asonaba Dapaah '11, deputy attorney-general and deputy minister of justice of the Republic of Ghana, who received an LL.M. in international law and justice at the Fordham Law School. "My eyes were opened on a different level to giving back to society and doing things that impact other people's lives positively—particularly being an advocate for fundamental human rights," she says.
After graduating from Fordham Law, Dapaah returned to Ghana and began working as a lecturer at the Ghana Institute of Management and Public Administration (GIMPA) Law School, both fulfilling a scholarship condition with the Leitner Center and cultivating her passion for teaching. Dapaah also clerked for Justice Georgina Wood, the first female chief justice of Ghana.
For the next 10 years, Dapaah continued to teach at GIMPA in the evenings while also gaining private practice experience at Sam Okudzeto & Associates, a leading private law firm in Ghana. In the course of her work as a private legal practitioner, she met her current boss, Attorney-General Godfred Yeboah Dame, while trying a case at the Supreme Court. "I believe I may have impressed him," she says. Yet her ties to Fordham Law remained strong, says Dapaah, who has also worked on alternative dispute resolution projects in Ghana alongside Fordham Law Professors John Feerick and Jacqueline Nolan-Haley. Those connections helped lead her all the way to the Office of the Attorney-General and Ministry of Justice in Ghana, where she assists her boss in fulfilling the constitutional mandate of the attorney-general as the principal legal adviser to the government of Ghana. "Fordham really is a great part of the success story," she says.
"My eyes were opened on a different level to giving back to society and doing things that impact other people's lives positively … "
She Works for the Artists
After completing an undergraduate degree in music, Jodie Shihadeh '11 soon realized that she preferred other aspects of the music industry to performing. But after graduating in 2006, with the music business still tanking from the effects of Napster, Shihadeh couldn't find a permanent job in the A&R department where she had been working while still in school.
"That's when I happened to find out that you could be a lawyer for artists, which was kind of my aha moment," she says. "I realized that I wanted to work with musicians and get their music out there."
She enrolled at Fordham Law with the goal of pursuing entertainment law, completing internships in the business affairs department of RCA Records and the boutique entertainment firm The Davis Firm, where she was hired after graduation.
In the summer of 2021, Shihadeh decided to strike out on her own, launching Shihadeh Law. "When you hit that 9- or 10-year mark in your career, I think it's just a natural progression that every lawyer faces," says Shihadeh. In its first year, the firm already has offices and attorneys working on both coasts, as well as a film and television practice in addition to its music practice.
Her clients include multiplatinum producer-songwriter J. White Did It, who produced Megan Thee Stallion's megahit "Savage," and Grammy-nominated producer-songwriter Roy Lenzo, who worked with Lil Nas X on his most recent album, Montero.
Shihadeh has her hands full, not just with the firm, but also as a new mother. Yet despite her commitments, she is passionate about mentoring other lawyers, whether they're just starting out or wondering how to balance family and work. "I started my law firm in a pandemic and then had a baby," she says. "It was a wild year, but it's just been amazing."


text:
Lifestyle / TV
Film executive who helped bring Game Of Thrones to Northern Ireland honoured
Richard Williams (Mary McVey)
A film executive who was instrumental in bringing Game Of Thrones to Northern Ireland has told of his delight at being recognised in the Queen's Birthday Honours list.
Richard Williams, the CEO Of Northern Ireland Screen, is to be awarded an OBE for services to the Screen Industries in Northern Ireland.
According to the latest figures from Northern Ireland Screen, an estimated £251 million has been returned to the Northern Ireland economy as a result of Game of Thrones filming there.
Mr Williams said: "I am delighted to accept this award which I see as a celebration of the tremendous value to Northern Ireland from the growth of the screen industries here and also recognition of the part that all my colleagues at Northern Ireland Screen have played in that success story."
Game Of Thrones star Maisie Williams (PA)
He hailed Game Of Thrones, which airs on HBO in the US and Sky Atlantic in the UK, for "transforming" the screen industries in Northern Ireland.
Mr Williams said: "It leaves a legacy of film studio infrastructure at Titanic Studios and Belfast Harbour Studios, an experienced crew hailed by HBO as the best crew in the world; supply chain companies used to dealing with the highest demands of modern content production; a screen tourism footprint that covers most of Northern Ireland and will be built on greatly in the near future; and, a brand association that provides the screen industry with the highest level of credibility.
"However, more than anything else, Game Of Thrones has unlocked a self-confidence in the next generation of screen industry talent who genuinely believe anything is possible."
A substantial portion of the gritty series, based on the George RR Martin fantasy books, was filmed in Northern Ireland over the show's eight series run.
Other names being honoured in the film sphere include co-founder and chief executive of Left Bank Pictures Andy Harries, who will receive an OBE for his services to film and television.
Andy Harries (Left Bank Pictures/Jack Harries)
Mr Harries, whose credits include The Crown, The Royle Family and Mrs Merton, said: "I love The Royle Family and I love the Royal Family.
"I have been lucky enough to make amazing shows over the last 30 years that span the breadth and width of British culture and British talent.
"Mrs Merton or her Majesty? It's a tough call, but I am honoured to accept the OBE on behalf of the UK's creative industries. We punch above our weight around the world with our great shows – long may it continue."
Other recipients include Nicola Shindler, who is being awarded an OBE for her services to broadcasting.
Her production company has made TV shows like Happy Valley, Queer As Folk and Scott And Bailey.
There is a CBE for Morris Angel, the chairman of long-established costume supplier Angels Costumes.
There is also an OBE for Alastair Fothergill, the producer of Blue Planet and Planet Earth.
Girl From The North Country actress Sheila Atim has been made an MBE for services to drama and Cary Rajinder Sawhney, director of the London Indian Film Festival, was made an MBE for services to film.
His Dark Materials is not an attack on the church, executive producer says
Game Of Thrones creators drop out of Comic-Con panel, HBO says
New Game Of Thrones-inspired artwork enlivening Larne town centre
Oscar winner Olivia Colman 'humbled' to become CBE in Queen's Birthday Honours


text:
Russian president lays flowers to Wall of Sorrow in Moscow
Vladimir Putin, Patriarch Kirill of Moscow and All Russia and Moscow Mayor Sergey Sobyanin laid flowers to the monument
© Mikhail Metzel/TASS
Hermitage's clock ticktocks after 100 years of standing still at October Revolution time
MOSCOW, October 30. /TASS/. Russian President Vladimir Putin has laid flowers to the Wall of Sorrow - a Moscow monument to victims of political repressions - and talked to some guests at the opening ceremony.
The ceremonial speeches were followed by a moment of silence, and then the choir performed a mourning composition.
Vladimir Putin, Patriarch Kirill of Moscow and All Russia and Moscow Mayor Sergey Sobyanin laid flowers to the monument. They passed through the Wall of Sorrow, and the state leader talked to several senior citizens who attended the ceremony.
About one hundred people came to the monument today: religious believers, government officials and human rights activists, as well as many elderly people who brought their children and grandchildren with them. Almost everyone was carrying flowers that they laid to the monument after the president.
NAVALNY'S ALLEGED POISONING
Two Moscow rally participants apprehended over violence against police
Investigative Committee's Main Moscow Investigative Directorate spokeswoman said one of them hit a police officer in the head several times during the January 23 rally


text:
Transit Accidents
On-The-Job Accidents
The Benefits Of Working With A Workers' Compensation Attorney
Today for a Free Consultation
Passionate, Proud Advocates
WE FIGHT FOR THE RIGHTS OF INJURED OKLAHOMANS
FOUNDED IN 1952, OUR LAW FIRM HAS A PROUD HISTORY OF HELPING THE INJURED
Frasier, Frasier & Hickman is OPEN! While we will do our best to follow our government's social distancing recommendations, we realize your needs do not stop and we are here to help! Our Firm is happy to accommodate your needs and do our consults over the phone. Call today to schedule your consult.
Personal Legal
Criminal liability following workplace accidents
On behalf of Frasier, Frasier & Hickman, LLP | Mar 7, 2017 | Workplace Injuries
Employers in Oklahoma and around the country can face criminal penalties when workplace accidents and injuries are caused by willful violations of recognized health and safety regulations. Executives can be fined as much as $250,000 and spend up to six months in jail under the regulations of the Occupational Safety and Health Act, also referred to as the OSH Act. Sanctions could be even more severe in states that have passed similar laws.
According to a memorandum of understanding between the Department of Labor and Department of Justice, employers who violate the Occupational Safety and Health Act can also be prosecuted under other legislation such as environmental protection laws. However, criminal charges must be proven beyond a reasonable doubt, and prosecutors must be able to show that employers either willfully ignored safety regulations or acted so indifferently that accidents were inevitable.
Criminal prosecutions are only made under the OSH Act when workers have lost their lives. When lax oversight causes workers to be injured, employers face civil penalties of up to $126,749 per violation. These penalties were increased recently to bring them into line with inflation.
Another recent development in the nation's capital has been the introduction of the Protecting America's Workers Act. If passed, this bill would increase the maximum jail sentence for OSH Act violations from six months to 10 years.
Injured workers in Oklahoma generally file workers' compensation claims rather than lawsuits, but attorneys with experience in this area may suggest litigation in certain situations. Lawyers could argue that a negligent disregard of safety and health standards amounts to a wilful intent to cause workers harm, and employers may be ordered to pay punitive damages when workplace injuries have been caused by flagrant violations of federal or state law.
Construction Workers' Accidents (8)
Industrial Workers' Accidents (3)
Workplace Accidents (11)
Fatal crash in Muskogee County
How to avoid jackknifing on the road
More died on the Oklahoma roads in 2020 despite fewer drivers
Can I sue a truck company after a truck accident?
What people can do if an initial workers' comp claim is denied
What Is Your Legal Issue?
Office Location :
Tulsa Law Office Map
© 2021 Frasier, Frasier & Hickman, LLP. All Rights Reserved.


text:
Baba's Explainer – Loan Write-offs
GS-3: Indian Economy and issues relating to planning, mobilization, of resources, growth, development
GS-2: Government policies and interventions for development in various sectors and issues arising out of their design and implementation.
GS-2: Statutory, regulatory and various quasi-judicial bodies.
Context: During the last five years — from 2017-18 to 2021-22 — scheduled commercial banks (137) wrote off non-performing assets (NPAs) worth ₹9,91,640 lakh crore out of which 12 public sector banks accounted for ₹7,27,330 crore.
Minister of State for Finance Bhagwat Karad, said this in a written reply to a Rajya Sabha unstarred question raised by Mallikarjun Kharge, in August.
However, according to RBI data, banks have written off ₹10,09,510 crore over the last five years. Public Sector Banks (PSBs) accounted for ₹7,34,738 crore of these write-offs.
What Is a Non-Performing Asset (NPA)?
A nonperforming asset (NPA) refers to a classification for loans or advances that are in default or in arrears.
A loan is in arrears when principal or interest payments are late or missed.
A loan is in default when the lender considers the loan agreement to be broken and the debtor is unable to meet his obligations.
In India, a non performing asset (NPA) is defined as a loan or advance for which the principal or interest payment remained overdue for a period of 90 days
NPA resolution is crucial for the economy because banks' ability to lend is critical for businesses and the economy to grow. A deluge of bad loans (i.e. NPAs) impairs banks' ability and willingness to lend that furthers impairs the growth prospects of economy.
What is the genesis of the NPA Problem that we are witnessing now?
Boom years of late 2000s: A large part of the problem started in the latter half of 2010s, as assumptions of persistently high economic growth made several large corporates overzealous in their investment ambitions, thus over-leveraging themselves in the process.
Role of Easy Credit by Banks: On the prospects of high economic growth financial sector, led by public sector banks, fuelled these expansion plans through easy money on credit.
2008 Financial Crisis: Growth (and demand) fizzled out following the global financial crisis of 2008. Despite the fire-fighting measures taken by government, the impact of the global crisis was felt in coming years. The crisis got further precipitated by Policy Paralysis of UPA-2 government (Corruption Scandals, Coalition Politics, standstill bureaucracy)
Vicious cycle: The stress from stretched corporate balance sheets (revenue impacted due to slowdown) infected banks' own books and underwhelmed banks own capacity for fresh lending. Former Chief Economic Adviser Arvind Subramanian had called it India's 'twin balance sheet problem' in the Economic Survey for 2016-17.
Peak reached in 2018: Over the course of 2014-19, India's banks were put on high alert by RBI for tighter recognition norms for bad loans. As a result, in March 2018, when bad loans on their books peaked to over ₹10 lakh crore — around 11.5% of all loans.
Why do banks resort to write-offs?
Writing off a loan essentially means it will no longer be counted as an asset.
The bank writes off a loan after the borrower has defaulted on the loan repayment and there is a very low chance of recovery.
Bank then moves the defaulted loan, or NPA, out of the assets side and reports the amount as a loss.
Therefore, write-off is an internal accounting procedure to clean up the balance sheet of a bank. It is resorted to even in cases where the bank has not exhausted all avenues for recovery of dues.
By writing off loans, a bank can reduce the level of non-performing assets (NPAs) on its books.
The tax liability will also come down as the written-off amount is reduced from the profit.
Such write-offs do not affect the right of the bank to proceed against the borrowers to collect the dues. Any recovery made against the borrower is considered as a profit for the bank in that financial year.
However, the chances of recovery from written-off loans are very low — as the RTI reply shows — which raises questions about the assets or collateral against which the banks lent funds to these defaulters.
Banks were able to recover only 13 per cent of this amount subsequently.
Analysts have questioned why banks are able to recover only a fraction of the written-off amount when banks normally lend funds against assets or collaterals.
Is write-off necessary for banks?
Losses in any business can occur for a variety of reasons. Losses in banking / financial sector (BFSI) broadly reflect the downturn in real economy and businesses that these institutions lend to.
Some businesses are impacted by
change in government policies
regulatory hurdles
even increased competition.
Fraud or malfeasance is only one among the many reasons.
It is also possible that a lender/banker may commit an error of judgement in advancing funds to a particular borrower or industry.
Factors that are beyond the control of both the banks and the borrowers could also lead to defaults. Under such circumstances, one cannot attribute malafide intentions on banks.
It may also be important to realise that all loan write-offs are not lost money. Significantly, many write-off cases continue to be on "birth register' of banks/financial institutions.
Loan write-offs are generally undertaken when a particular business is failing. In fact, it may be worse than a 'fire-sale' or a 'retrieval-sale'.
Prudential norms on Income Recognition, Asset Classification and Provisioning (IRACP) pertaining to advances have been in force for more than two decades. Despite this, Indian banks hid losses for decades.
The 'write-offs' we are investigating today would not have been possible but for a policy change by the RBI in 2015 that mandated all banks to come clean on the extent of bad loans they had been hiding in their financial reports.
Main Practice Question: Why do banks write-off loans? What are its implications on the economy?
Note: Write answer his question in the comment section.
Default, Loan Waiver, NPA, RBI, Write-off
[INTERVIEW INITIATIVE] Think, Rethink and Perform (TRP) [DAY 12] 2022 for UPSC/IAS Personality Test!


This course introduces students to building performance assessment (with a focus on energy and indoor environmental quality) during the (pre)design and operational phase of buildings. The course provides students with the conceptual knowledge to assess the performance of buildings in the (pre)design and operational phase using a variety of tools (e.g. sensors, data loggers and building simulation tools) and methods (e.g. measurement and simulation).
Upon completion students will be able to: (1) apply the performance based approach to improve building performance and value the concepts, assumptions and limitations that are related to the methods currently used in that approach; (2) utilize a state-of-the-art building performance simulation software on a basic level to analyze the performance of a building design and suggests design improvements; and (3) analyze and evaluate building measurement data in order to assess building performance.
As a follow-up to the CVUT course "Introduction to building performance simulation", this Capita Selecta (= selected subjects) MSc and PhD course aims to explore in greater depth some selected concepts of this technology in terms of theory, assumptions, operation and limitations.
Given the (increasing) complexity of energy/ environmental systems in buildings, computer modeling and simulation is emerging as a viable approach to design and performance evaluation. This MSc course aims to give an introduction of the theoretical and operational principles underlying this new technology. By a series of (oral and self-study) lectures, the course introduces the concepts, assumptions and limitations which underlie the methods currently used to appraise the energy performance of buildings. The subjects are developed from basic principles assuming limited knowledge of computers and application software.


This sparkly, adorable tee is great, because 1. It's limited-edition, and 2. It represents all the fun they had in this year's World's Largest PINK Pajama Party in Chicago. I didn't go, but I know that Fergie performed, free PINK items were given out, and the party anthem was Fergie's "Here I Come" which I love. Anyways, this tee-shirt costs $29.50...but all the sparkly/glittery/shiny things on it makes it worth it!
It would be my absolute dream to have taken this to a past sleepover...on top of it probably being really funny to have brought this, it is just so cute- as well as functional. It's even water repellent and has tons of pockets...now that I think of it, it would be great for camping too! Not that I think I'll be going camping any time soon, but it would be great to bring if I would. Anyways, it costs $48.50.
I am completely in between saying this hoodie is completely amazing, or if it is completely tacky...which happens a lot when I'm looking at clothes, now that I think about it. This happens the most when I'm loooking at VS Pink or Juicy Couture clothes, for obvious reasons. Well, whatever, I actually think I like it- but I'm not sure if I would buy it...would you? Comment to tell me, please! It costs $68.
As most of you should know (if you've read my blog before) I'm a sucker for comfy-cuteness. Which of course, is why I just adore this scarf. I am loving rugby stripes (a trend for Fall) and the Varsity P and "peace hand" just make this cuter. Don't you just love that little peace hand? It even has a heart in it :) And, all for $19.50.
This is the same anonymous before that commented on Dylan's band on her dress and the red belt that went over it...thanks for respecting my opinion, Geisha! :-) I love this post, especially the rubgy scarf! I would wear that sweatshirt, cuz it's VSP, not some knock-off brand or something, so I think it's ok. But wouldn't that sweatshirt with those sweatpants be complete overkill?! I can't stand matching sweatsuits (random I know).
you finally did a VS Pink post! well i really like it and i adore the mini dog as well as the pillow. I personally would NOT buy the hoodie but its probably cause idon't like gold and i do think its a little bit tacky but i don't know, i can't really decide myself either...well love ya!
-miss you, im in italy right now LOL great post!!!!!
Awwwww that pillow is adorable. As wierd as this sounds I'd like to just buy it and walk around with it..in an attempt to make it my accessory.
Awesome post i think everything is cute except the sweat shirt. Its a little tacky for my taste. ILY!
P.S.- Lian how cool to hear from you in Italy see you when you get back!
click on the name to see the link!
I absolutely hate Pink. But that's closely related to my lounge wear fear.
haha those are so so cute!!! great post!!! love those stuff!!
I love the little PINK dogs.
OK, I just love the name of your blog.
Pink is so great for lounging at home!
I Just Love Mini Dresses!


To own a Mercedes-Benz off-roader is to experience an off-roader that can rise to any occasion. It has all the attributes which make a Mercedes-Benz what it is. The unique feeling of driving a Mercedes off-road cannot be put into words – you have to experience it for yourself. At our 4x4 training facility you will first hand feel how it is to drive your dream car.
Protea 4x4 and Mercedes-Benz have designed a course which covers both the practical and theoretical aspects of off-roading and at the same time teach you about the conservation of both the fauna and flora surrounding us.
The course has been specifically tailored for Southern African conditions. It was developed by Protea in response to off-roaders wanting to maximise their enjoyment whilst off-roading on a wide variety of terrain and varying conditions, typically found in the African Great Outdoors. The training is interactive and practical, it takes place in the Rhino and Lion Nature Reserve on natural terrain typically found in Southern Africa as we believe you bought this vehicle to explore and to undertake various safari's to explore Southern Africa. This Reserve boast some of the most dramatic and rugged wilderness areas found in Gauteng with great wildlife sightings. Which makes it a perfect environment to learn more about your Mercedes-Benz and its amazing capabilities.
Our 4x4 off-road training course is designed to help you practice with others so that you can improve your off-road driving skills. We offer a one-day intensive driver training course for Mercedes-Benz owners.
It is an adventurous and fun day out for you and your family to enjoy the interaction between you and other Mercedes-owners.
Dina and I would like to thank you once again for a very special day we had the pleasure of participating in on Saturday. The venue , attention to detail , dissemination of information , hands on instruction and obstacle instruction , assistance by your co-presenters and not forgetting the lunch was excellent . It is one of the best participation days I have ever had the privileged of being involved in and learnt a lot which will no doubt influence the ability of my general road handling ability and that of my off road knowledge .Photos will be made available to you as soon as possible and once again I would have no hesitation in recommending your services to any company or individual.


text:
Top 10 Michael Kors Jewellery For Summer
Summer accessorising is a great way to incorporate new and colourful trends into your jewellery collection. Many people become bolder with their fashion choices in the summer months, whether it be by experimenting with clothing or accessories. This t
Authorised retailer for Michael Kors Watches. Michael Kors is a fashion brand which sells ready-to-wear, shoes, watches and jewellery. The brand has more than 40 years below its belt and stores across the world. The brand's timepieces and jewellery are inspired by the people who wear them. Created for comfort with a casual-chic style, each and every Michael Kors piece immediately captures the eye. Its namesake and founder Michael Kors has expressed his intent to create clothing and accessories which bring out the confidence in anyone who wears it.
Michael Kors was founded in 1981 in the US by American designer Michael Kors. From a young child, Kors was interested in fashion and had a passion for design. Encouraged by his mother, the young designer pursued a career in the industry and enrolled at the Fashion Institute of Technology in New York City, however, he later dropped out. Still determined to develop in the fashion world, Kors took a job in a Manhattan boutique across from Bergdorf Goodman. He progressed quickly and became a designer and the visual display head for the boutique. Impressed by his talent and know-how, Bergdorf's fashion director at the time Dawn Mello asked if Kors would sell his collection in the luxury department store. This was the breakthrough Michael Kors needed and in 1981 the brand was launched. The designer's clothing and accessories quickly became successful as unlike other luxury fashion brands at the time, Kors' collection was ready-to-wear. His pieces were comfortable and practical for the everyday. Following his initial success, Michael Kors later launched a men's line and a line of handbags and accessories.
Much like the brand's clothing, Michael Kors watches are designed with practicality in mind. This, however, does not take away from the fashionable aesthetic of the models. The Michael Kors watches are available in a variety of platings and syles. Crystals set into the bezels or dials add a touch of brilliance to many of the models. Each watch is made of the highest quality materials and carries within itself the unmistakable Michael Kors spirit.
Official Michael Kors UK dealer
Free delivery on UK orders
Thousands of online reviews - average rating 4.9 / 5: Google Reviews - Trustpilot - ResellerRatings
Free bracelet adjustment available on metal watches
Over 20 years of high street watch and jewellery experience
About Michael Kors Watches Read latest news


"Captain Cool" is nominated for Padma Bhusan Award Ms Dhoni, the only captain in the world to win all the ICC trophies. Captain cool has amazed us many times with his breath taking shots. MSD has been nominated for the prestigious Padma Bhusan award by BCCI on Wednesday.
Ms Dhoni, the only captain in the world to win all the ICC trophies. Captain cool has amazed us many times with his breath taking shots. MSD has been nominated for the prestigious Padma Bhusan award by BCCI on Wednesday.
With this nomination, former Indian captain has joined the club comprising of Cottari Nayudu, Vinoo Mankand, Sunil Gavaskar, Raja Bhalendra Singh, Dinkar Balwant Deodhar, Kapil Dev, Chandu Borde and Rahul Dravid.
A senior BCCI official has confirmed that the cricket governing body of India has only sent Ms-Dhoni's name for the Padma awards this year.
This Wicketkeeper- Batsman has made immense contributions to Indian cricket. There was no doubt among the members that Dhoni has a great track record and has been exceptional as both captain and as a player.
He has two world titles i.e., 2011 50 over world cup and world T20, nearly 10,000 runs and 90 test matches in his bag of credits.
BCCI said that there is no one better than him to be nominated for this prestigious award.
After stepping down from the post of captaincy, Dhoni has been in tremendous form with the bat. This year continues to be a memorable one for the cricketer not only with bat but with gloves too. The 36 years old became the first wicket-keeper to effect 100 stumping and also 6th Indian Batsman to feature in 300 ODI'S.


Election/selection: The President will select the Committee chair, offered by the Nominating Committee, subject to the approval of the Executive Committee and the authorization of the membership at the annual meeting. Committee members will be selected by the Committee Chair, subject to the approval of the Executive Committee and to the authorization of the membership.
Time commitment: Committee chair will attend AMSER Executive Committee meeting at AUR meeting and at RSNA meeting (in person or by teleconference). Chair and committee will communicate throughout the year to attend to committee business. Attendance at AMSER members' meeting at AUR meeting is strongly encouraged for both Chair and committee members.


The Rihanna/Cher hit writer saves some thrilling noir pop for herself.
I am still blown away from the last album/ EP. She is a powerhouse vocalist and writer.
This album is amazingly produced and the quality of songwriting and vocals is just outstanding.
How reassuring that among the pile of garbage that is today's music and composition there is stuff like this that comes out.
What amazes me is that literally all the songs on this album are A+++, all of them qualify as singles.
Sadly I don't think she gets the recognition she deserves, again, the songwriting is just mind blowing, creativity, sound, everything is top notch.
Soooo refreshing!!!! Thousand thanks LP for putting this out there for us mere mortals!!!


Join us for our 8th annual Cruise In taking place May 12 14, 2016 in New Iberia, LA. We will cruise New Iberia, Breaux Bridge and Lafayette this year beginning with a tour of Acadian Village in Lafayette, LA. We will also tour a Prehistoric Park complete with Dinosaurs. Friday night we will be down town New Iberia with lots of fun. Poker Runs on Friday and Saturday scheduled with tours of Tabasco, Shadows on the Teche, Konriko Rice Mill and lots of other locations. We will finish the Cruise off with a party at Cypress Bayou Casino. See our web site for complete details.


text:
Viewing entries from category: Censorship & Regulation
International Film Styles: Neorealism »
jclarke | Friday September 04, 2015
Categories: A Level, EDUQAS A Level, EDUQAS A2, FM4, Section A: World Cinema, Analysis, Film Analysis, Film History, Cinema in Context, Film Industry, Censorship & Regulation, Copyright & Licensing, Film Distribution, Film Marketing, Film Publicity, Film Promotion, Production Companies, Films & Case Studies, Non-Hollywood Films, Kes, World Cinema, Rome, Open City, Genres & Case Studies, Neorealism, Hot Entries, Key Concepts, Audience, Film Language, Representation
Across the varied and diverse ways in which a film text can encode and emphasise meanings and a specific viewpoint on or presentation of a subject, realism is a key aesthetic and formal choice and approach that has functioned as a key creative direction of so much western expression across literature and the visual arts. This resource, then, explores the characteristics of a particular film style that we call neorealism. It stems from post World War Two...
Sweet Sweetback's Baadasssss Song (1971) Case Study »
Rob Miller | Monday September 22, 2014
Categories: A Level, EDUQAS A Level, EDUQAS A2, FM4, Section C: Single Film Critical Study, Analysis, Film Analysis, Film Industry, Censorship & Regulation, Film Distribution, Film Marketing, Film Publicity, Films & Case Studies, Non-Hollywood Films, Sweet Sweetback's Baadasssss Song, Genres & Case Studies, Crime, Drama, Independent, Thriller, Hot Entries, Key Concepts, Representation
FM4: Varieties of Film Experience – Issues and Debates Section C: Single Film – Critical Study
Section C of FM4 offers students the ability to engage in a critical study of a single film, within a synoptic framework – this means the micro and the macro features need to be studied, as well as issues of representation. Useful will be placing the film in an institutional and cultural context in reference to production, funding distribution,...
British Film and Genre (Horror and Comedy) »
Rob Miller | Wednesday December 04, 2013
Categories: A Level, EDUQAS A Level, EDUQAS AS, FM2, Section B: British Film Topics, Analysis, Film Analysis, Film Industry, Censorship & Regulation, Copyright & Licensing, Film Distribution, Film Marketing, Film Publicity, Film Promotion, Production Companies, Films & Case Studies, Hollywood Films, 28 Days Later, Non-Hollywood Films, Four Lions, Genres & Case Studies, British Film, Comedy, Horror, Hot Entries, Key Concepts, Audience, Film Language, Representation
The British Film Industry is successful and thriving but as Jill Nelmes identified in An Introduction to Film Studies can be defined on a number or levels and by a range of "disparate films, genres and movements?. In addition to this there are arguments over what is a British Film and as such, there have been many attempts to define British Film over the years. A useful definition that the BFI proposed in 1996 was that films...
Film and Thatcher's Britain »
jclarke | Tuesday December 03, 2013
Categories: A Level, EDUQAS A Level, EDUQAS AS, FM2, Section B: British Film Topics, Analysis, Film Analysis, Film Industry, Censorship & Regulation, Copyright & Licensing, Film Marketing, Film Publicity, Film Promotion, Films & Case Studies, Hollywood Films, Chariots of Fire, Non-Hollywood Films, My Beautiful Laundrette, Genres & Case Studies, Comedy, Drama, History, Romance, Sport, Hot Entries, Key Concepts, Audience, Film Language, Representation
One of the key issues to be explored in our study of film is that of representation. As such, it's fair to say that there's an established, and largely agreed upon, understanding that film, like other media and forms of cultural expression, can reflect back to us aspects of the conditions in which we live or have lived with. Certainly, there's scope for us to think about how British cinema has, in more or less...
The Impact of World War Two on British Cinema »
Categories: A Level, OCR A Level, OCR AS, Analysis, Film Analysis, Film History, Cinema in Context, Film Industry, Censorship & Regulation, Copyright & Licensing, Film Distribution, Film Marketing, Film Publicity, Film Promotion, Production Companies, Films & Case Studies, Non-Hollywood Films, In Which We Serve, The Life and Death of Colonel Blimp, Genres & Case Studies, Drama, Romance, War, Hot Entries, Key Concepts, Audience, Film Language, Representation
World War Two impacted ferociously on Great Britain: cities were attacked by German bombers, air battles were fought and daily life was severely tested over the six years of conflict. It's understandable though, if the war seems a long, long time ago to you. Cinema, however, offers us a meaningful way to reconnect with, and reflect on the event and to develop a sense of the relationship between World War Two and British...
Spectatorship and Early Cinema Before 1917 »
jclarke | Saturday November 30, 2013
Categories: A Level, OCR A Level, OCR A2, OCR AS, EDUQAS A Level, EDUQAS A2, FM4, Section B: Spectatorship Topics, Analysis, Film Analysis, Film History, Cinema in Context, Film Industry, Censorship & Regulation, Copyright & Licensing, Film Distribution, Film Marketing, Film Publicity, Film Promotion, Production Companies, Hot Entries, Key Concepts, Audience, Film Language, Representation, Theory, Spectatorship Theory
Cinema is now nearly 120 years old and it's a magnificently broad, deep, complex and exciting subject.
It's understandably easy to think that the way films are now is how they have always been, in terms of their technology and particularly how they organize (tell) their stories. However, this isn't the case and so it's important for us to be aware that all forms of cultural expression evolve across time and that they...
Developments in 21st Century Cinema and Film (2000-Present) »
jclarke | Wednesday November 27, 2013
Categories: A Level, OCR A Level, OCR A2, OCR AS, EDUQAS A Level, EDUQAS AS, EDUQAS A2, Film History, Cinema in Context, Film Industry, Censorship & Regulation, Copyright & Licensing, Film Distribution, Film Marketing, Film Publicity, Film Promotion, Production Companies, Films & Case Studies, Hollywood Films, Avatar, World Cinema, Atanarjuat: The Fast Runner, Hot Entries, Key Concepts, Audience, Film Language, Representation
Film is technology. It's an obvious point, and an essential one.
Film established itself as a symbol of the modern, mechanical age of the late nineteenth and early twentieth century and so it is particularly interesting to now witness how the medium is moving into the digital age. Indeed, we should perhaps talk not of new technology but of now technology because it is so quickly ever changing and evolving. In Western Europe...
Film Regulation and Classification »
jclarke | Thursday November 14, 2013
Categories: A Level, OCR A Level, OCR A2, OCR AS, EDUQAS A Level, EDUQAS AS, EDUQAS A2, Film Industry, Censorship & Regulation, Hot Entries
Britain is one of the most highly regulated nations in the 'west' in terms of what can be shown at cinemas and in this resource we will explore aspects of the institutional roles of film regulation and classification and the dynamic that is legally required to operate between the institutions of the British Board of Film Classification (BBFC) and the film industry. To put it very simply, if you want your film distributed...
Censorship & Regulation Links »
Richard Gent | Monday September 12, 2011
Categories: Film Industry, Censorship & Regulation
BBFC.org.uk Find out about film certification and censorship using this site.
SBBFC.org.uk Students' British Board of Film Classification This site is aimed at media and film studies students and teachers covering the topics of Media Regulation and Censorship in the UK. The site was designed and is maintained by the British Board of Film Classification.
TMAP.org.uk Teenage Magazine Arbitration Panel The Teenage Magazine Arbitration Panel (TMAP) is the...


Are there downsides to online and offline marketing?
As an entrepreneur, whether working online or offline, promoting your business should be an important part of your job. But, what is the way to go? And, in this digital area, should you still be using offline marketing? Or should all focus be on online marketing? We say, why not combine the two. Every day, more professionals discover the benefits of combining online and offline marketing. Resulting in taking advantage of all the possibilities and capturing the maximum number of customers for a product or service or visitors to a website – drastically increasing our chances of success.
In this article we will share everything you need to know about online and offline marketing. We will give you tips how to take advantage of what each of them offer us and how you can use it for your (small) business. And yes, also for a website or blog. Just keep in mind that both have the same objective: to make our business known and increase the number of visitors to a website or blog or on the other hand increase the sales of a product or brand.
Let's go step by step and first define what offline marketing is. It can be described as the use of traditional tools to make oneself known and relate face to face. You can think about printed materials like flyers, brochures and even promotional products. Later on in this article we will explain a bit more about some of these offline marketing tools. An online printing services that can help you get different tools ready. These products are especially useful for small business that can't afford or prefer not to invest in large marketing campaigns (online).
Digital is new and exciting and it seems that everyone is online 24/7. But of course this is not the case. Consumers live in the offline world and therefore do not only come into contact with online channels. We must not forget that traditional methods still offer many advantages, this include tools that have been used for many years.
If we talk about the advantages of offline marketing we can highlight several things. On one side there are advantages to face to face communication, on the other hand you have the advantage of ordering the tools online. When speaking about the ordering of offline marketing tools, first thing that comes to mind is that offline tools normally have a low cost. Furthermore they are easy to personalize and can be ordered online without leaving a workplace and at the moment that is most convenient for you.
While using the offline materials, you have contact with people, are able to look them in the face and to shake hands, smiling and clearing their doubts on the spot. It is one of the most credible ways this time to attract customers. The good thing about doing offline marketing is that, if we bring our products with us, people will be able to see it, touch it and, above all, understand it better. This is something that we cannot achieve with online marketing. If you are promoting for example a new travel gadget, you can show it to people who can try it and directly see the advantage of the product. Also, as a business we can see the effect the product has on people, simply by looking him in the face if he is interested or not.
There are different offline marketing tools that can be really effective for small businesses and even websites or blogs to promote their name. Let's take a closer look at some powerful tools you can use. Flyers and leaflets for example are perfect to reach a large group of people. They are not only useful to communicate an event like a store opening or a party, also if you have a sale on your website or would like to use a catching tool to communicate a message, flyers are a good choice. You can hand them out in person at meetings where your target group comes or have them delivered door-to-door in a specific region.
Business cards are also still an effective tool. You can use them to give your contact details to people you meet in person and can be of interest to your business, whether as a potential buyer or visitor for your website, or for a collaboration. Don't forget to make an attractive design and clearly mention all your contact details. These offline tools, and more, are easy to personalize at an online printer. And we are not only talking about using your own design, you can also choose all the options of the finishes of the product; size, paper quality, paper finish and quantity are just some examples of the chooses you can decide on. With a relatively low investment you can reach a wide group of people or target your ideal client.
As we have done before with offline marketing, let's first define what online marketing is in order to understand it better. Digital marketing embraces all the advertising strategies that are carried out on the Internet. This can be for example a website, accounts on social networks, participate on forums, and write a blog. In these digital times online marketing is used more and more, next to or instead of the more traditional methods. The advantage of online marketing is that all types of companies can access them regardless of their size.
And if you are a blogger, your business is already online. All we need is an internet connection and you can start working on online marketing. As for the possibility to have direct communication with (potential) clients, an email can work perfect. A big plus of using online marketing to promote your business or website is that we can say goodbye to selling only in our local region or getting visitors from close by. Thanks to working online we have the option of being able to send our message through the entire world. You can easily access the statistics so you will get results in much less time, improving decision making. And of course, online lets us be 'open' 24 hours a day, something that with in a physical business cannot be achieved.
It can seem that online and offline marketing both only have advantages, but of course this is not the case, like nothing is flawless. Online marketing can be a short-lived tool. It exists online and when your advertising campaign for example is over, it is normally nowhere to be found again. Also, if someone misses an announcement, they will probably not see it again. There are also still a group of people who don't like all things digital and prefer to have something physical in their hands.
Just as online marketing, offline marketing also has its downsides. You can hand out your tools to a lot of people, but you have no guarantees they will see your company name. Flyers can be thrown directly in the trash for example. And if you have an online business, it can be difficult to get people to make the move from an offline tool to an online medium. So it's important to use the strength of both tools and see how they can reinforce each other.
So the question is ´Can we combine these two marketing techniques?` Although some people find it somewhat confusing, it can certainly be done. Blended marketing is the answer. This method lets you use the best points of each channel to retain the maximum number of customers or visitors to a website and drastically increase the chances of growth and success of the organization.
The easiest way of blended marketing is using the traditional media to communicate the online tools a business is using. Yes, it seems very simple and easy to do, but we must take into account the design process. Let´s not forget that for offline tools to be seen and remembered, they have to be eye-catching. The design has to make the user wants to find out more about a certain product or service to go online and find it out. In this example the offline marketing can be seen as a lead for the online channel. Another example of combining online and offline marketing is to use online tools such as Google Adwords and Facebook to find out more about the type of customers or visitors of the website. With this information offline promotions can be adapted to certain types of groups, for example discounts that are communicated offline and are only valid for a specific target group.
In conclusion, no matter what type of business you run, online and offline marketing should both be used and combined to obtain the best results for your company.
Do you have experience combining online and offline? We would love to hear your experience in the comments.