public override double CalculateError(IRecommendation recommendation, IEnumerable <IRating> ratings, IEnumerable <IRater> raters, IEnumerable <ISubject> subjects)
        {
            var grouppedByRater = ratings.GroupBy(p => p.Rater.Id);
            var count           = 0D;
            var sum             = 0D;
            var evaluator       = new MeanAbsoluteErrorEvaluator();

            foreach (var rater in grouppedByRater)
            {
                var error = evaluator.CalculateError(recommendation, rater.AsEnumerable(), new List <IRater>()
                {
                    raters.First(p => p.Id == rater.Key)
                }, subjects);

                if (error != -1)
                {
                    sum += error;
                    ++count;
                }
            }
            if (count == 0)
            {
                return(-1);
            }
            var avarage = sum / count;

            return(avarage);
        }
        public override double CalculateError(IRecommendation recommendation, IEnumerable <IRating> ratings, IEnumerable <IRater> raters, IEnumerable <ISubject> subjects)
        {
            var sum   = 0D;
            var count = 0;

            foreach (var rating in ratings)
            {
                var value = recommendation.RecommendSubject(rating.Rater, rating.Subject);

                if (value == null)
                {
                    continue;
                }

                var diff = value.Value - rating.Value;
                sum += Math.Abs(diff);
                ++count;
            }
            ;

            if (count == 0)
            {
                return(-1);
            }

            var error = sum / count;

            return(error);
        }
예제 #3
0
        public void NotifyRecommendationEnds(IRecommendation recommendation)
        {
            Check.Argument.IsNotNull(recommendation.Email, "email");

            string body = PrepareMailBodyWith("RecommendationEndNotification", "endTime", recommendation.EndTime.ToShortDateString(), "recommendationLink", recommendation.RecommendationLink);

            SendMailAsync(_settings.WebmasterEmail, recommendation.Email, "Powiadomienie o kończącej się reklamie", body);
        }
 public RecommendationViewModel(IRecommendation recommendation)
 {
     this.ID = recommendation.ID;
     this.UserID = recommendation.UserID;
     this.AppName = recommendation.AppName;
     this.Description = recommendation.Description;
     this.OperatingSystem = recommendation.OperatingSystem;
 }
        public void Remove(IRecommendation entity)
        {
            Check.Argument.IsNotNull(entity, "entity");

            Recommendation recommendation = (Recommendation)entity;

            base.Remove(recommendation);
        }
예제 #6
0
 public HomeController(IRecentTracks recentTracks, ISavedAlbums savedAlbums,
                       IRecommendation recommendation, IPlaylistSaver playlistSaver,
                       IConfiguration configuration)
 {
     _recentTracks   = recentTracks;
     _savedAlbums    = savedAlbums;
     _recommendation = recommendation;
     _playlistSaver  = playlistSaver;
     _configuration  = configuration;
 }
        public ActionResult GetAd(string id)
        {
            id = id.NullSafe();
            JsonViewData viewData = Validate <JsonViewData>(
                new Validation(() => string.IsNullOrEmpty(id), "Identyfikator reklamy nie może być pusty."),
                new Validation(() => id.ToGuid().IsEmpty(), "Niepoprawny reklamy artykułu."),
                new Validation(() => !IsCurrentUserAuthenticated, "Nie jesteś zalogowany."),
                new Validation(() => !CurrentUser.CanModerate(), "Nie masz praw do woływania tej metody.")
                );

            if (viewData == null)
            {
                try
                {
                    IRecommendation recommendation = _recommendationRepository.FindById(id.ToGuid());

                    if (recommendation == null)
                    {
                        viewData = new JsonViewData {
                            errorMessage = "Podana rekalama nie istnieje."
                        };
                    }
                    else
                    {
                        return(Json(
                                   new
                        {
                            id = recommendation.Id.Shrink(),
                            recommendationLink = recommendation.RecommendationLink,
                            recommendationTitle = recommendation.RecommendationTitle,
                            imageLink = recommendation.ImageLink,
                            imageTitle = recommendation.ImageTitle,
                            startTime = recommendation.StartTime.ToString("yyyy-MM-dd"),
                            endTime = recommendation.EndTime.ToString("yyyy-MM-dd"),
                            position = recommendation.Position,
                            email = recommendation.Email,
                            notificationIsSent = recommendation.NotificationIsSent,
                            isBanner = recommendation.IsBanner
                        }
                                   ));
                    }
                }
                catch (Exception e)
                {
                    Log.Exception(e);

                    viewData = new JsonViewData {
                        errorMessage = FormatStrings.UnknownError.FormatWith("pobierania reklamy")
                    };
                }
            }

            return(Json(viewData));
        }
        public Task InsertRecommendationAsync(IRecommendation recommendation)
        {
            _logger.Debug("Create Recommendation - RecommendationId:{RecommendationId}", recommendation?.RecommendationId);

            if (recommendation == null || !(recommendation is Recommendation rec))
            {
                throw new ArgumentException(nameof(recommendation));
            }

            return(Recommendations.InsertOneAsync(rec));
        }
        public ActionResult DeleteAd(string id)
        {
            id = id.NullSafe();

            JsonViewData viewData = Validate <JsonViewData>(
                new Validation(() => !CurrentUser.CanModerate(), "Nie masz praw do wołania tej metody."),
                new Validation(() => string.IsNullOrEmpty(id), "Identyfikator reklamy nie może być pusty."),
                new Validation(() => id.ToGuid().IsEmpty(), "Niepoprawny identyfikator reklamy."),
                new Validation(() => !IsCurrentUserAuthenticated, "Nie jesteś zalogowany.")
                );

            if (viewData == null)
            {
                try
                {
                    using (IUnitOfWork unitOfWork = UnitOfWork.Begin())
                    {
                        IRecommendation recommendation = _recommendationRepository.FindById(id.ToGuid());

                        if (recommendation == null)
                        {
                            viewData = new JsonViewData {
                                errorMessage = "Reklama nie istnieje."
                            };
                        }
                        else
                        {
                            _recommendationRepository.Remove(recommendation);
                            unitOfWork.Commit();

                            viewData = new JsonViewData {
                                isSuccessful = true
                            };
                        }
                    }
                }
                catch (Exception e)
                {
                    Log.Exception(e);

                    viewData = new JsonViewData
                    {
                        errorMessage = FormatStrings.UnknownError.FormatWith("usuwania reklamy")
                    };
                }
            }

            return(Json(viewData));
        }
 private static RecommendationViewData CreateRecommendationViewData(IRecommendation x)
 {
     return(new RecommendationViewData()
     {
         UrlLink = x.RecommendationLink,
         UrlTitle = x.RecommendationTitle,
         ImageName = x.ImageLink,
         ImageAlt = x.ImageTitle,
         Position = x.Position,
         EndTime = x.EndTime,
         Email = x.Email,
         NotificationIsSent = x.NotificationIsSent,
         IsBanner = x.IsBanner,
         Id = x.Id.Shrink()
     });
 }
        public override double CalculateError(IRecommendation recommendation, IEnumerable <IRating> ratings, IEnumerable <IRater> raters, IEnumerable <ISubject> subjects)
        {
            double error = 0.0;

            foreach (var rater in raters)
            {
                var topList = recommendation.RecommendSubjects(rater, subjects, 0, 10);

                foreach (var result in topList)
                {
                    if (!ratings.Any(r => r.Subject == result.Subject && r.Rater == result.Rater))
                    {
                        error += 1.0;
                    }
                }
            }

            return(error);
        }
        public void EditAd(IRecommendation recommendation, string recommendationLink, string recommendationTitle, string imageLink, string imageTitle, DateTime startTime, DateTime endTime, string email, int position, bool notificationIsSent, bool isBanner)
        {
            Check.Argument.IsNotNull(recommendation, "Recommendation");

            if (!string.IsNullOrEmpty(recommendationLink))
            {
                recommendation.RecommendationLink = recommendationLink;
            }

            if (!string.IsNullOrEmpty(recommendationTitle))
            {
                recommendation.RecommendationTitle = recommendationTitle;
            }

            if (!string.IsNullOrEmpty(imageLink))
            {
                recommendation.ImageLink = imageLink;
            }

            if (!string.IsNullOrEmpty(imageTitle))
            {
                recommendation.ImageTitle = imageTitle;
            }

            if (position != recommendation.Position)
            {
                recommendation.Position = position;
            }

            recommendation.StartTime = startTime;

            recommendation.EndTime = endTime;

            recommendation.Email = email;

            recommendation.NotificationIsSent = notificationIsSent;

            recommendation.IsBanner = isBanner;
        }
        public ActionResult EditAd(AdvertiseViewData model)
        {
            JsonViewData viewData = Validate <JsonViewData>(
                new Validation(() => CurrentUser.CanModerate() == false, "Nie masz praw do wykonowania tej operacji."),
                new Validation(() => string.IsNullOrEmpty(model.RecommendationLink.NullSafe()), "Link rekomendacji nie może być pusty."),
                new Validation(() => string.IsNullOrEmpty(model.RecommendationTitle.NullSafe()), "Tytuł rekomendacji nie może być pusty."),
                new Validation(() => string.IsNullOrEmpty(model.ImageLink.NullSafe()), "Link obrazka nie może być pusty."),
                new Validation(() => string.IsNullOrEmpty(model.ImageTitle.NullSafe()), "Tytuł obrazka nie może być pusty."),
                new Validation(() => model.StartTime >= model.EndTime, "Data zakończenia reklamy musi być większa od daty początkowej"),
                new Validation(() => string.IsNullOrEmpty(model.Email), "Adres e-mail nie może być pusty."),
                new Validation(() => !model.Email.NullSafe().IsEmail(), "Niepoprawny adres e-mail.")
                );

            var bannerType = string.IsNullOrWhiteSpace(model.IsBanner) == false;

            if (viewData == null)
            {
                try
                {
                    if (bannerType)
                    {
                        var request  = WebRequest.Create(Server.MapPath(string.Format("/Assets/Images/{0}", model.ImageLink)));
                        var response = request.GetResponse();
                        var image    = Image.FromStream(response.GetResponseStream());

                        if (image.Width != 960)
                        {
                            viewData = new JsonViewData {
                                errorMessage = string.Format("Oczekiwana szerokość banera to 960px, twoja to: {0}", image.Width)
                            };
                            return(Json(viewData));
                        }
                    }
                    using (IUnitOfWork unitOfWork = UnitOfWork.Begin())
                    {
                        if (model.Id == null || model.Id.IsEmpty())
                        {
                            IRecommendation recommendation = _factory.CreateRecommendation(
                                model.RecommendationLink.Trim(),
                                model.RecommendationTitle.Trim(),
                                model.ImageLink.Trim(),
                                model.ImageTitle.Trim(),
                                model.StartTime,
                                model.EndTime,
                                model.Email,
                                model.Position,
                                model.NotificationIsSent,
                                bannerType);
                            _recommendationRepository.Add(recommendation);

                            unitOfWork.Commit();

                            Log.Info("Recommendation registered: {0}", recommendation.RecommendationTitle);

                            viewData = new JsonViewData {
                                isSuccessful = true
                            };
                        }
                        else
                        {
                            IRecommendation recommendation = _recommendationRepository.FindById(model.Id.ToGuid());

                            if (recommendation == null)
                            {
                                viewData = new JsonViewData {
                                    errorMessage = "Podana reklama nie istnieje."
                                };
                            }
                            else
                            {
                                _recommendationRepository.EditAd(
                                    recommendation,
                                    model.RecommendationLink.NullSafe(),
                                    model.RecommendationTitle.NullSafe(),
                                    model.ImageLink.NullSafe(),
                                    model.ImageTitle.NullSafe(),
                                    model.StartTime,
                                    model.EndTime,
                                    model.Email,
                                    model.Position,
                                    model.NotificationIsSent,
                                    bannerType);

                                unitOfWork.Commit();

                                viewData = new JsonViewData {
                                    isSuccessful = true
                                };
                            }
                        }
                    }
                }
                catch (ArgumentException argument)
                {
                    viewData = new JsonViewData {
                        errorMessage = argument.Message
                    };
                }
                catch (WebException e)
                {
                    viewData = new JsonViewData {
                        errorMessage = "Podany link do zdjęcia jest nieprawidłowy"
                    };
                }
                catch (Exception e)
                {
                    Log.Exception(e);

                    viewData = new JsonViewData {
                        errorMessage = FormatStrings.UnknownError.FormatWith("")
                    };
                }
            }

            return(Json(viewData));
        }
예제 #14
0
 public GrayscaleFilter(IRecommendation rec)
 {
     _rec = rec;
 }
예제 #15
0
 public abstract double CalculateError(IRecommendation recommendation, IEnumerable <IRating> ratings, IEnumerable <IRater> raters, IEnumerable <ISubject> subjects);
예제 #16
0
 /// <summary>
 /// Adds a recommendation
 /// </summary>
 /// <param name="recommendation">The recommendation</param>
 public void AddRecommendation(IRecommendation recommendation)
 {
     using (var context = Connection.GetContext())
     {
         context.Recommendations.Add(new Persistence.Recommendation() 
         {
             AppDesignation = recommendation.AppName,
             Description = recommendation.Description,
             OSID = recommendation.OperatingSystem,
             UserID = this.ID,
             Date = DateTime.Now
         });
         context.SaveChanges();
     }
 }
 public AlgorithmCache(IRecommendation algorithm)
 {
     _algorithm = algorithm;
     _cache     = new ConcurrentDictionary <string, double>();
 }
예제 #18
0
 public RecommendationController(IRecommendation recommendation)
 {
     _Services = recommendation;
 }
예제 #19
0
        static bool ComputeErrorRate(IEvaluator evaluator, IRecommendation recommendation)
        {
            var watch = new Stopwatch();

            try
            {
                var reader = new DataReader();

                var subjects = Enumerable.Empty <Movie>();
                var raters   = Enumerable.Empty <User>();
                var ratings  = Enumerable.Empty <Rating>();

                reader.ReadDataFromFiles(_moviesPath, _testRatingPath, out subjects, out raters, out ratings);

                Console.WriteLine("Started: " + recommendation.ToString());

                watch.Start();

                var error = evaluator.CalculateError(recommendation, ratings, raters, subjects);

                watch.Stop();

                var algName = recommendation.ToString();

                var errorName = evaluator.MethodName;

                var text = string.Format("Algorithm: {0}\t{1}: {2}\tElapsed: {3}", algName, errorName, error,
                                         watch.Elapsed);

                Console.WriteLine(text);

                using (var stream = File.AppendText("scores.txt"))
                    stream.WriteLine(text);

                return(true);
            }
            catch (Exception ex)
            {
                if (watch.IsRunning)
                {
                    watch.Stop();
                }

                var err = string.Format("{0} \n\n {1} \n\n {2}", watch.Elapsed, ex.Message, ex.StackTrace);

                using (var stream = File.AppendText("error.txt"))
                    stream.WriteLine(err);

                var innerEx = ex.InnerException;

                while (innerEx != null)
                {
                    err = string.Format("inner: \n\n {0} \n\n {1}", innerEx.Message, innerEx.StackTrace);

                    using (var stream = File.AppendText("error.txt"))
                        stream.WriteLine(err);

                    innerEx = innerEx.InnerException;
                }

                return(false);
            }
        }
예제 #20
0
 public int CompareTo(IRecommendation other)
 {
     return(Value > other.Value ? -1 : (Value < other.Value ? 1 : 0));
 }
예제 #21
0
 public BinaryFilter(IRecommendation rec)
 {
     _rec = rec;
 }
 public int CompareTo(IRecommendation other)
 {
     return Value > other.Value ? -1 : (Value < other.Value ? 1 : 0);
 }