General Manager Kevin J. Scheid, on behalf of Secretary General Jens Stoltenberg, awarded 12 employees the NATO Meritorious Service Medal. Meet Agency experts awarded for their service. Here's what our honourees had to say.
The NCI Agency is constantly evolving to respond to advances in technology and guard NATO against new threats.
And the Agency's employees help it adapt, guiding projects through difficult timelines and complex technical challenges to deliver critical technology and services to the Alliance.
General Manager Kevin J. Scheid, on behalf of Secretary General Jens Stoltenberg, awarded 12 such employees the NATO Meritorious Service Medal. They were recognized in a ceremony on 13 December 2018 for outstanding service to the organization.
We asked the honourees about their careers, and more specifically, what it has been like to work for NATO's tech and cyber hub. Some described their most exciting projects. Others outlined how they overcame setbacks and challenges. And some of them told us who, or what, inspires them.
Here's what our honourees had to say. Their answers have been edited for length and clarity.
Price is a member of a small team of operational analysts who provide continuous expert analytical support to the Afghan Assessment Group (AAG) at Resolute Support Headquarters in Kabul, Afghanistan. From mid-August 2016 to mid-February 2017 Price spent more than four months in theatre. He even spent the Christmas period in theatre for the third time since he joined the team supporting the AAG in 2012. During his deployments Price made significant contributions to the availability of quality data and analytical expertise to the headquarters.
What is the most exciting thing you have done while working for the Agency?
Nick Price said: "The most exciting thing I did was my first deployment to the International Security Assistance Force in Afghanistan in 2012. It was my first time providing deployed support. Going into the ops room and seeing the mission playing out on giant screens brought into focus the importance of the support we provide."
In his role as a lead Routing and Switching engineer for the NCI Agency business network, Verschaeve distinguished himself. Verschaeve inherited management of the NATO transmission network, which was expanded under his leadership. He spearheaded the effort to create a secure, modern Wi-Fi based network, with redundancy and complete portability for NATO staff amongst three core sites and more than 30 additional global NATO locations throughout the Alliance. The network enables critical services such as communications, security and cyber defence.
What was the hardest project that you've worked on?
Anthony Verschaeve said: "The hardest project I worked on for the Agency is the expansion of a network sized and built for 600-800 users, to 3,500-4,000 NATO users. The network encompasses multiple NATO locations throughout the Alliance, on different levels of network classification. The expansion of this network had to be completed within critical timeline boundaries, by a small team representing all of the Agency's service lines. The project was finished well in time; and its major success was due to the dedication, outstanding personal contribution and the will to succeed by every single member of this team."
The Active Network Infrastructure (ANWI) project is a partnership between industry and the Agency to create modern networks for the new NATO headquarters at different classification levels, where personnel can use their preferred method of communication easily, reliably and securely no matter what application or device they choose to use. As a senior service engineer, Gosepath performed under high pressure while leading the ANWI Programme Office Engineering Team. Gosepath produced high quality technical recommendations, which led to sound solutions. Gosepath is a very committed, highly-motivated, talented resource.
What is the best part of working at the Agency?
Gregor Gosepath said: "The best part of working in the Agency is experiencing the loyalty of people from multiple nations and the dedication of all staff to deliver meaningful services to the NATO Enterprise, Alliance and Nations. In the words of General Colin Powell: 'Trust is the glue that holds people together and is the lubricant that keeps an organization moving forward.' During the last projects, work was done, products were created and services were delivered because the matrix teams worked together based on a trusted foundation."
Broecker has consistently excelled in executing his duties and providing exemplary support to the Agency and its customers. However, it is his role as the Acting Operations Manager which distinguished him. The services he oversees include voice, video and network connections to all 29 Allies, as well as operational deployments. Without his efforts, these critical services used by the Alliance would not have been as expertly implemented and missions would have faltered. Broecker has worked tirelessly to ensure that staff is managed fairly and services are delivered professionally.
Who inspired you at the Agency?
Steffen Broecker said: "Throughout my NATO career, I was inspired by many persons in and outside of the Agency, Deputy Secretary General Rose Gottemoeller and former SACEUR Admiral James Stavridis, to name but two. However, my daily drive and inspiration derives from my very diverse team and my immediate management. Most of them are still serving in the Agency whereas others decided to move on or retire. Without naming them, they have certain traits in common: they put the team first, give trust in advance, accept mistakes, do not fear making decisions, focus on achievements and - being in the operational environment for a long time – they have a 'get the job done' attitude. In recent years, it was important for me to have people around me who accepted and embraced change. They were and are a constant reminder to not rest on achievements or laurels."
In her role, LTC Vidal has brought CIS expertise to the team relocating the NATO Communications and Information Systems School from Latina, Italy to Oeiras, Portugal. LTC Vidal works tirelessly, often through the night, and delivers outputs that are truly exceptional. Since day one, she has provided outstanding leadership and commitment to the agency across a wide range of subjects that would typically require far more personnel. Her ability to lead by example, engage and enthuse staff across NATO is exemplary. As the NCI Academy (the successor of the NATO CIS School) now starts to take shape, the foundations she painstakingly and professionally laid will be felt in NATO for generations to come.
Please tell us about the project you worked on.
LTC Elisabete Vidal said: "The NCI Academy Programme was created to lead the planning, coordination and implementation of a world-class technical education and training capability, supporting the operational preparedness of NATO, and available to all Allies. The NATO Nations, through a rapidly approved Capability Package, reset the geographical footprint in 2012. Since then the NATO CIS School was destined to be relocated to Oeiras. This relocation is partly enabled through the delivery of a purpose-built facility, a striking building enhancing the Carcavelos skyline. A transformation is required to become 'world-class', and the interdependent combinations of all the factors associated with a transformed organization is at the heart of the programme I have the privilege to support."
As a member of the new NATO Headquarters programme team, Festjens single-handedly put a portion of the project on a path of assured success. The improvement required immense time, effort and personal sacrifice, and only happened because of his selfless service and true commitment to the success of the Agency.
Can you talk about the biggest challenge you've faced in your career? How did you conquer it?
John Festjens said: "Working in a large organization comes with its challenges: we are in a state of constant change and sometimes new projects and activities pop up before we can finish the old ones. Getting things done with a limited amount of resources is always challenging, as is working across the borders of your sub-organization within the Agency. What I find most rewarding and challenging, is working with people. Handling the different cultures and personalities, understanding how to motivate them, how to align people to get to the common objectives. How to get there? Giving the best of myself and a positive attitude, every day."
As a leader, Akkasoglu has stepped up and inspired people. In December 2016, he led the implementation of a project that was supposed to finish before the closure of the fiscal year. The sensitive project was delayed, until he stayed awake with his personnel for two nights over the weekend to complete it within the time constraints.
What advice would you give for working better as a team?
Yaman Akkasoglu said: "Communication is critical for creating empathy among team members. Listening and trying to understand each other would be the greatest merits of the team. Constructive feedback is the best way to increase the efficiency and effectiveness of the teamwork."
Brown showed exceptional leadership in all aspects of independent testing, verification and assurance of the Active Network Infrastructure (ANWI) for the new NATO Headquarters. Brown analyzed the effort and its challenges, and took corrective action when needed. If those challenges became high risks, he immediately and honestly reported them to senior leadership.
What values are most important for Agency employees to have?
David Brown said: "There are of course many values employees of the Agency should have. However, I have found that two are particularly important for a successful career in the Agency: flexibility and team-focus. NATO's needs and priorities are constantly evolving due to the geopolitical situation. Each of us needs to be flexible to adapt to these changes in a timely manner. Being team-focused in practice means involving relevant staff to solve problems. Hold them accountable, but also respect their expertise and make them part of the solution. Do not try to do everything yourself. Rely on your colleagues as we have very talented people in the Agency."
Gaul is a member of a small team of operational analysts who provide continuous deployed expert analytical support to the Afghan Assessment Group at Resolute Support Headquarters in Kabul, Afghanistan. For all but 20 days of this six-month Meritorious Service period, from 1 March 2018 to 31 August 2018, Marcus Gaul was deployed to the group at Resolute Support Headquarters. He was critical to the group accomplishing its tasks, and he did his work with great attitude and energy. This is the second time Gaul has received this honour.
What are you most proud of in your career at the Agency?
Marcus Gaul said: "As a civilian who has worked for more than six years in the Kabul-based military headquarters of the NATO missions in Afghanistan, I am particularly proud of being able to bring my extensive operational experience to different project contexts in the Agency and to provide 'reality checks'."
Jenkins has also received the honour twice. Jenkins, as the CIS Support Unit (CSU) Commander in Brussels, is responsible for providing local CIS support. This mission undoubtedly challenged him extraordinarily in 2017. It was an intense period of maintaining the infrastructure at the former NATO Headquarters while preparing the CSU staff to operate and maintain the new NATO Headquarters. Jenkins ensured the contractor performed adequately while keeping the team motivated. He not only exceeded in achieving all of his given objectives, but most valuably showed his exceptional leadership in maintaining his unit's morale and leading the team through an extremely difficult set of achievements.
How was your project important to NATO's success?
David Jenkins said: "I think the new NATO Headquarters project demonstrates that the Agency is capable of great things in spite of what may appear as insurmountable challenges. And whatever challenge our Alliance may be faced with tomorrow, if information, communications or advanced technology is needed, we'll be there."
When he joined the Agency in 2016, Pierre Pradier was immediately redirected from the role he was hired to perform to lead the Active Network Infrastructure (ANWI) programme at the New NATO Headquarters (NNHQ). Pradier has demonstrated superb programme leadership and management. He analyzed programme issues and developed a get-well strategy that had immediate, near and far term measures of success. It was his methodical, systematic and orderly leadership that drove achievements in the programme. He articulates problems and offers practical solutions and courageously defends positions with poise and professionalism under intense schedule or management pressures.
Pierre Pradier said: "ANWI was a long journey, marked by many challenges, in an initially cold and empty building… But one thing was there from the start and never faltered: our team spirit. It led us through the storms to our final success: bring IT life to the New NATO Headquarters. As someone once said, 'It is a fact that in the right formation, the lifting power of many wings can achieve twice the distance of any bird flying alone.'"


1. Ingredients (plus coconut cream and stock).
2. Peel and boil sweet potato.
5. Once sweet potato's are soft. Strain, and mash.
6. In a large pot saute prepped veggies.
7. Once veggies are just cooked add stock, and coconut cream. Allow to simmer for 5 minutes.
8. Add your mashed sweet potato and stir until combined. Allow to simmer for a further 5 minutes.
9. While still simmering add your fish, prawns and dill.
10. You'll know when your fish is perfect at the pink color your prawns have turned (took mine around 3-4 minutes).
You could also add scallops, mussels etc!
Just a glimpse out my patio for you.


text:
//
//  OEXMyVideosSubSectionViewController.m
//  edXVideoLocker
//
//  Created by Rahul Varma on 30/06/14.
//  Copyright (c) 2014-2015 edX. All rights reserved.
//

#import "OEXMyVideosSubSectionViewController.h"

#import "edX-Swift.h"

#import "NSArray+OEXSafeAccess.h"
#import "NSString+OEXFormatting.h"

#import "OEXAppDelegate.h"
#import "OEXCourse.h"
#import "OEXCourseVideosTableViewCell.h"
#import "OEXCustomLabel.h"
#import "OEXDataParser.h"
#import "OEXDateFormatting.h"
#import "OEXInterface.h"
#import "OEXHelperVideoDownload.h"
#import "OEXStatusMessageViewController.h"
#import "OEXStyles.h"
#import "OEXUserDetails.h"
#import "OEXVideoPathEntry.h"
#import "OEXVideoPlayerInterface.h"
#import "OEXVideoSummary.h"
#import "OEXRouter.h"
#import "Reachability.h"

#define HEADER_HEIGHT 80.0
#define SHIFT_LEFT 40.0
#define ORIGINAL_RIGHT_SPACE_PROGRESSBAR 8
#define VIDEO_VIEW_HEIGHT  225

typedef NS_ENUM (NSUInteger, OEXAlertType) {
    OEXAlertTypeNextVideoAlert,
    OEXAlertTypeDeleteConfirmationAlert,
    OEXAlertTypePlayBackErrorAlert,
    OEXAlertTypeCannotPlayVideo,
    OEXAlertTypeVideoTimeOutAlert,
    OEXAlertTypePlayBackContentUnAvailable
};

@interface OEXMyVideosSubSectionViewController () <UITableViewDelegate, OEXStatusMessageControlling>
{
    NSIndexPath* clickedIndexpath;
}

@property(strong, nonatomic) OEXVideoPlayerInterface* videoPlayerInterface;
@property(strong, nonatomic) OEXHelperVideoDownload* currentTappedVideo;
@property(strong, nonatomic) NSURL* currentVideoURL;
@property(strong, nonatomic) NSIndexPath* selectedIndexPath;
@property(nonatomic, assign) BOOL isTableEditing;
@property(nonatomic, assign) BOOL selectAll;
@property (nonatomic, strong) NSMutableArray* arr_SelectedObjects;
@property (nonatomic, strong) OEXInterface* dataInterface;
@property (nonatomic, strong) NSMutableArray* arr_SubsectionData;
@property(nonatomic) NSInteger alertCount;

@property (weak, nonatomic) IBOutlet OEXCustomLabel* lbl_videoHeader;
@property (weak, nonatomic) IBOutlet OEXCustomLabel* lbl_videobottom;
@property (weak, nonatomic)  IBOutlet OEXCustomLabel* lbl_section;
@property (weak, nonatomic) IBOutlet UIView* video_containerView;
@property (strong, nonatomic) IBOutlet NSLayoutConstraint* videoViewHeight;
@property   (weak, nonatomic) IBOutlet UIView* videoVideo;
@property (weak, nonatomic) IBOutlet NSLayoutConstraint* TrailingSpaceCustomProgress;

@property (weak, nonatomic) IBOutlet OEXCustomNavigationView* customNavigation;
@property (weak, nonatomic) IBOutlet UITableView* table_SubSectionVideos;
@property (weak, nonatomic) IBOutlet DACircularProgressView* customProgressBar;
@property (weak, nonatomic) IBOutlet UIButton* btn_Downloads;
@property (weak, nonatomic) IBOutlet NSLayoutConstraint* contraintEditingView;
@property (weak, nonatomic) IBOutlet OEXCustomEditingView* customEditing;
@property (weak, nonatomic) IBOutlet OEXCheckBox* selectAllButton;

@end

@implementation OEXMyVideosSubSectionViewController

- (CGFloat)verticalOffsetForStatusController:(OEXStatusMessageViewController*)controller {
    return CGRectGetMaxY(self.customNavigation.frame);
}

- (NSArray*)overlayViewsForStatusController:(OEXStatusMessageViewController*)controller {
    NSMutableArray* result = [[NSMutableArray alloc] init];
    [result oex_safeAddObjectOrNil:self.customNavigation];
    [result oex_safeAddObjectOrNil:self.customProgressBar];
    [result oex_safeAddObjectOrNil:self.selectAllButton];
    [result oex_safeAddObjectOrNil:self.btn_Downloads];
    return result;
}

#pragma mark - REACHABILITY

- (void)HideOfflineLabel:(BOOL)isOnline {
    self.customNavigation.lbl_Offline.hidden = isOnline;
    self.customNavigation.view_Offline.hidden = isOnline;
    [self.customNavigation adjustPositionOfComponentsWithEditingMode:_isTableEditing isOnline:isOnline];
}

- (void)reachabilityDidChange:(NSNotification*)notification {
    id<Reachability> reachability = [notification object];

    if([reachability isReachable]) {
        _dataInterface.reachable = YES;

        [self HideOfflineLabel:YES];
    }
    else {
        _dataInterface.reachable = NO;

        [self HideOfflineLabel:NO];
    }
}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [self.navigationController setNavigationBarHidden:true animated:animated];

    //Add oserver
    [self addObservers];

    if(_isTableEditing) {
        self.TrailingSpaceCustomProgress.constant = ORIGINAL_RIGHT_SPACE_PROGRESSBAR + SHIFT_LEFT;
    }
    // Add Observer
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityDidChange:) name:kReachabilityChangedNotification object:nil];

    if(_videoPlayerInterface) {
        [self.videoPlayerInterface videoPlayerShouldRotate];
    }

    // Check Reachability for OFFLINE
    if(_dataInterface.reachable) {
        [self HideOfflineLabel:YES];
    }
    else {
        [self HideOfflineLabel:NO];
    }

    // To clear already selected items when traverese back from Download screen.
    [self cancelTableClicked:nil];

    self.table_SubSectionVideos.separatorInset = UIEdgeInsetsZero;
#ifdef __IPHONE_8_0
    if(IS_IOS8) {
        [self.table_SubSectionVideos setLayoutMargins:UIEdgeInsetsZero];
    }
#endif
}

- (void)navigateBack {
    [self cancelTableClicked:nil];
    [self removePlayerObserver];
    [self.videoPlayerInterface.moviePlayerController pause];
    [self.videoPlayerInterface.moviePlayerController setFullscreen:NO];
    [self.videoPlayerInterface resetPlayer];
    self.videoPlayerInterface.videoPlayerVideoView = nil;
    [self.videoPlayerInterface willMoveToParentViewController:nil];
    [self.videoPlayerInterface removeFromParentViewController];
    self.videoPlayerInterface = nil;
    [self.navigationController popViewControllerAnimated:YES];
}

- (void)removePlayerObserver {
    [[NSNotificationCenter defaultCenter] removeObserver:self name:NOTIFICATION_NEXT_VIDEO object:nil];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:NOTIFICATION_PREVIOUS_VIDEO object:nil];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackStateDidChangeNotification object:_videoPlayerInterface.moviePlayerController];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:_videoPlayerInterface.moviePlayerController];
}

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    //set exclusive touch for all btns
    self.customNavigation.btn_Back.exclusiveTouch = YES;
    self.btn_Downloads.exclusiveTouch = YES;
    self.view.exclusiveTouch = YES;
    self.videoVideo.exclusiveTouch = YES;

    //Hide back button
    [self.navigationItem setHidesBackButton:YES];
    self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@" " style:UIBarButtonItemStylePlain target:nil action:nil];
    [self.navigationController.navigationBar setTranslucent:NO];

    // Set custom navigation properties
    self.customNavigation.lbl_TitleView.text = self.course.name;
    [self.customNavigation.btn_Back addTarget:self action:@selector(navigateBack) forControlEvents:UIControlEventTouchUpInside];

    // Initialize the interface for API calling
    self.dataInterface = [OEXInterface sharedInterface];
    //set custom progress bar properties

    [self.customProgressBar setProgressTintColor:PROGRESSBAR_PROGRESS_TINT_COLOR];

    [self.customProgressBar setTrackTintColor:PROGRESSBAR_TRACK_TINT_COLOR];

    [self.customProgressBar setProgress:_dataInterface.totalProgress animated:YES];

    //Init video view and video player
    self.videoPlayerInterface = [[OEXVideoPlayerInterface alloc] init];
    [self addChildViewController:self.videoPlayerInterface];
    [self.videoPlayerInterface didMoveToParentViewController:self];
    _videoPlayerInterface.videoPlayerVideoView = self.videoVideo;
    self.videoViewHeight.constant = 0;
    self.videoVideo.exclusiveTouch = YES;

    //Fix for 20px issue for the table view
    self.automaticallyAdjustsScrollViewInsets = NO;

    // Call to populate data
    [self getSubsectionVideoDataFromArray];

    [[self.dataInterface progressViews] addObject:self.customProgressBar];
    [[self.dataInterface progressViews] addObject:self.btn_Downloads];
    [self.customProgressBar setHidden:YES];
    [self.btn_Downloads setHidden:YES];

    // Used for autorotation
    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:) name:UIDeviceOrientationDidChangeNotification object:nil];

    // Show Custom editing View
    [self.customEditing.btn_Edit addTarget:self action:@selector(editTableClicked:) forControlEvents:UIControlEventTouchUpInside];
    [self.customEditing.btn_Delete addTarget:self action:@selector(deleteTableClicked:) forControlEvents:UIControlEventTouchUpInside];
    [self.customEditing.btn_Cancel addTarget:self action:@selector(cancelTableClicked:) forControlEvents:UIControlEventTouchUpInside];
    self.selectAllButton.hidden = YES;
    self.selectAllButton.accessibilityLabel = [Strings accessibilitySelectAll];

    self.isTableEditing = NO;           // Check Edit button is clicked
    self.selectAll = NO;        // Check if all are selected

    [[OEXStyles sharedStyles] applyMockBackButtonStyleToButton:self.customNavigation.btn_Back];
    [[OEXStyles sharedStyles] applyMockNavigationBarStyleToView:self.customNavigation label:self.customNavigation.lbl_TitleView leftIconButton:self.customNavigation.btn_Back];

}

- (void)addObservers {
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playNextVideo) name:NOTIFICATION_NEXT_VIDEO object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playPreviousVideo) name:NOTIFICATION_PREVIOUS_VIDEO object:nil];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateTotalDownloadProgress:) name:OEXDownloadProgressChangedNotification object:nil];

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(playbackStateChanged:)
                                                 name:MPMoviePlayerPlaybackStateDidChangeNotification object:_videoPlayerInterface.moviePlayerController];
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(playbackEnded:)
                                                 name:MPMoviePlayerPlaybackDidFinishNotification object:_videoPlayerInterface.moviePlayerController];

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(downloadCompleteNotification:)
                                                 name:OEXDownloadEndedNotification object:nil];
}

#pragma update total download progress

- (void)downloadCompleteNotification:(NSNotification*)notification {
    NSDictionary* dict = notification.userInfo;

    NSURLSessionTask* task = [dict objectForKey:VIDEO_DL_COMPLETE_N_TASK];
    NSURL* url = task.originalRequest.URL;

    if([OEXInterface isURLForVideo:url.absoluteString]) {
        [self getSubsectionVideoDataFromArray];
    }
}

- (void)updateTotalDownloadProgress:(NSNotification* )notification {
    [self.customProgressBar setProgress:_dataInterface.totalProgress animated:YES];
}

- (void)getSubsectionVideoDataFromArray {
    // Initialize array
    self.arr_CourseData = [[NSMutableArray alloc] init];

    // Initialize array of data to show on table
    self.arr_SubsectionData = [[NSMutableArray alloc] init];

    NSMutableArray* arrCourseAndVideo = [[NSMutableArray alloc] initWithArray: [_dataInterface coursesAndVideosForDownloadState:OEXDownloadStateComplete] ];

    /*
    <__NSArrayM 0x10c7a3e40>(

            {
                course = "<Course: 0x10c78f730>";
                videos =     (
                              "<HelperVideoDownload: 0x10c7aa6b0>"
                              );
            }

     )
    */

    for(NSDictionary* dict in arrCourseAndVideo) {
        OEXCourse* course = [dict objectForKey:CAV_KEY_COURSE];

        if([course.name isEqualToString:self.customNavigation.lbl_TitleView.text]) {
            self.arr_CourseData = [dict objectForKey:CAV_KEY_VIDEOS];
        }
    }

    // arr_CourseData --> array of all HelperVideoDownload objects in clicked Course

    for(OEXHelperVideoDownload* video in self.arr_CourseData) {
        NSMutableArray* arr_section = [[NSMutableArray alloc] init];

        // Sorting the data with chapter name and section name
        for(OEXHelperVideoDownload* objvideo in self.arr_CourseData) {
            // Compare both chapter and section
            if([video.summary.chapterPathEntry isEqual:objvideo.summary.chapterPathEntry] && [video.summary.sectionPathEntry isEqual:objvideo.summary.sectionPathEntry]) {
                [arr_section addObject:objvideo];
            }
        }

        // To Remove the duplicate or rather not add it to the main array.
        // To avoid the re-arranging and other processing
        NSMutableArray* arr_CheckDup = [arr_section mutableCopy];

        for(OEXHelperVideoDownload* objvideoCheck in arr_CheckDup) {
            for(NSMutableArray* check in self.arr_SubsectionData) {
                for(OEXHelperVideoDownload* objV in check) {
                    if([objvideoCheck.summary.chapterPathEntry isEqual:objV.summary.chapterPathEntry] && [objvideoCheck.summary.sectionPathEntry isEqual:objV.summary.sectionPathEntry]) {
                        [arr_section removeObject:objvideoCheck];
                    }
                }
            }
        }

        if([arr_section count] > 0) {
            [self.arr_SubsectionData addObject:arr_section];
        }
    }
    [self.table_SubSectionVideos reloadData];
}

- (BOOL)ChapterNameAlreadyDisplayed:(NSInteger)section {
    OEXHelperVideoDownload* video = [[self.arr_SubsectionData oex_safeObjectAtIndex:section] oex_safeObjectAtIndex:0];

    //  Below for loop check to resolve MOB-447
    //  Multiple headers for the same Section appear in My Videos
    BOOL ChapnameExists = NO;
    int i;

    for(i = 0; i < section; i++) {
        OEXHelperVideoDownload* videoCompare = [[self.arr_SubsectionData objectAtIndex:i] objectAtIndex:0];

        if([video.summary.chapterPathEntry isEqual:videoCompare.summary.chapterPathEntry]) {
            ChapnameExists = YES;
        }
    }

    return ChapnameExists;
}

#pragma mark TableViewDataSourceDelegate

- (NSInteger)numberOfSectionsInTableView:(UITableView*)tableView {
    _selectedIndexPath = nil;
    return [self.arr_SubsectionData count];
}

- (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section {
    return [[self.arr_SubsectionData objectAtIndex:section] count];
}

- (UIView*)tableView:(UITableView*)tableView viewForHeaderInSection:(NSInteger)section {
    if([[self.arr_SubsectionData objectAtIndex:section] count] == 0) {
        return nil;
    }

    OEXHelperVideoDownload* video = [[self.arr_SubsectionData objectAtIndex:section] objectAtIndex:0];

    BOOL ChapnameExists = [self ChapterNameAlreadyDisplayed:section];

    UIView* viewMain;
    UIView* viewTop;
    UIView* viewBottom;
    UILabel* chapTitle;
    UILabel* sectionTitle;

    if(ChapnameExists) {
        viewMain = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 30 )];

        viewBottom = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 30 )];
        viewBottom.backgroundColor = GREY_COLOR;
        [viewMain addSubview:viewBottom];

        sectionTitle = [[UILabel alloc] initWithFrame:CGRectMake(20, 0, 300, 30)];
        sectionTitle.text = video.summary.sectionPathEntry.name;
        sectionTitle.font = [UIFont fontWithName:@"OpenSans-Semibold" size:14.0f];
        sectionTitle.textColor = [UIColor blackColor];
        [viewMain addSubview:sectionTitle];
    }
    else {
        viewMain = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, HEADER_HEIGHT )];

        viewTop = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 50 )];
        viewTop.backgroundColor = [UIColor colorWithRed:62.0 / 255.0 green:66.0 / 255.0 blue:71.0 / 255.0 alpha:1.0];
        [viewMain addSubview:viewTop];

        viewBottom = [[UIView alloc] initWithFrame:CGRectMake(0, 50, 320, 30 )];
        viewBottom.backgroundColor = GREY_COLOR;
        [viewMain addSubview:viewBottom];

        chapTitle = [[UILabel alloc] initWithFrame:CGRectMake(20, 0, 300, 50)];
        chapTitle.text = video.summary.chapterPathEntry.name;
        chapTitle.font = [UIFont fontWithName:@"OpenSans-Semibold" size:14.0f];
        chapTitle.textColor = [UIColor whiteColor];
        [viewMain addSubview:chapTitle];

        sectionTitle = [[UILabel alloc] initWithFrame:CGRectMake(20, 50, 300, 30)];
        sectionTitle.text = video.summary.sectionPathEntry.name;
        sectionTitle.font = [UIFont fontWithName:@"OpenSans-Semibold" size:14.0f];
        sectionTitle.textColor = [UIColor blackColor];
        [viewMain addSubview:sectionTitle];
    }

    return viewMain;
}

- (CGFloat)tableView:(UITableView*)tableView heightForHeaderInSection:(NSInteger)section {
    BOOL ChapnameExists = [self ChapterNameAlreadyDisplayed:section];

    if(ChapnameExists) {
        return 30;
    }
    else {
        return HEADER_HEIGHT;
    }
}

- (UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath {
    static NSString* cellIndentifier = @"CellCourseVideo";

    OEXCourseVideosTableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:cellIndentifier];

    NSArray* videos = [self.arr_SubsectionData objectAtIndex:indexPath.section];
    cell.btn_Download.hidden = YES;
    OEXHelperVideoDownload* obj_video = [videos objectAtIndex:indexPath.row];
    cell.lbl_Title.text = obj_video.summary.name;
    if([cell.lbl_Title.text length] == 0) {
        cell.lbl_Title.text = @"(Untitled)";
    }
    double size = [obj_video.summary.size doubleValue];
    float result = ((size / 1024) / 1024);
    cell.lbl_Size.text = [NSString stringWithFormat:@"%.2fMB", result];

    if(!obj_video.summary.duration) {
        cell.lbl_Time.text = @"NA";
    }
    else {
        cell.lbl_Time.text = [OEXDateFormatting formatSecondsAsVideoLength: obj_video.summary.duration];
    }

    //Played state
    UIImage* playedImage;
    if(obj_video.watchedState == OEXPlayedStateWatched) {
        playedImage = [UIImage imageNamed:@"ic_watched.png"];
    }
    else if(obj_video.watchedState == OEXPlayedStatePartiallyWatched) {
        playedImage = [UIImage imageNamed:@"ic_partiallywatched.png"];
    }
    else {
        playedImage = [UIImage imageNamed:@"ic_unwatched.png"];
    }
    cell.img_VideoWatchState.image = playedImage;

    if(self.isTableEditing) {
        // Unhide the checkbox and set the tag
        cell.btn_CheckboxDelete.hidden = NO;
        if ([self isRTL]) {
            cell.subSectionCourseVideoStateLeadingConstraint.constant = 60;
        }
        cell.btn_CheckboxDelete.tag = (indexPath.section * 100) + indexPath.row;
        [cell.btn_CheckboxDelete addTarget:self action:@selector(selectCheckbox:) forControlEvents:UIControlEventTouchUpInside];

        // Toggle between selected and unselected checkbox
        cell.btn_CheckboxDelete.checked = obj_video.isSelected;
    }
    else {
        cell.btn_CheckboxDelete.hidden = YES;
        cell.btn_CheckboxDelete.hidden = YES;
        cell.subSectionCourseVideoStateLeadingConstraint.constant = 10;
        if(self.currentTappedVideo == obj_video && !self.isTableEditing) {
            [self setSelectedCellAtIndexPath:indexPath tableView:tableView];
            _selectedIndexPath = indexPath;
        }
    }
#ifdef __IPHONE_8_0
    if(IS_IOS8) {
        [cell setLayoutMargins:UIEdgeInsetsZero];
    }
#endif

    return cell;
}

- (void)tableView:(UITableView*)tableView willDisplayCell:(UITableViewCell*)cell forRowAtIndexPath:(NSIndexPath*)indexPath {
    UIView* backview = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 50)];
    [backview setBackgroundColor:SELECTED_CELL_COLOR];
    cell.selectedBackgroundView = backview;
    if(indexPath == _selectedIndexPath) {
        [cell setSelected:YES animated:NO];
    }
}

- (void)setSelectedCellAtIndexPath:(NSIndexPath*)indexPath tableView:(UITableView*)tableView {
    UITableViewCell* cell = [tableView cellForRowAtIndexPath:indexPath];
    [cell setSelected:YES animated:YES];
}

- (void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath {
    // To avoid showing selected cell index of old video when new video is played
    _dataInterface.selectedCCIndex = -1;
    _dataInterface.selectedVideoSpeedIndex = -1;

    clickedIndexpath = indexPath;

    if(!_isTableEditing) {
        // To check and diable the Previous button on the player
        [self CheckIfFirstVideoPlayed:indexPath];

        // To check and diable the NExt button on the player
        [self CheckIfLastVideoPlayed:indexPath];

        [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:_selectedIndexPath, nil] withRowAnimation:UITableViewRowAnimationNone];
        _selectedIndexPath = indexPath;

        [self playVideoForIndexPath:indexPath];
    }

    [tableView reloadData];
}

- (void)playVideoForIndexPath:(NSIndexPath*)indexPath {
    NSArray* videos = [self.arr_SubsectionData objectAtIndex:indexPath.section];

    OEXHelperVideoDownload* obj = [videos objectAtIndex:indexPath.row];

    // Set the path of the downloaded videos
    [_dataInterface downloadAllTranscriptsForVideo:obj];

    //stop current video
    [_videoPlayerInterface.moviePlayerController stop];

    self.currentTappedVideo = obj;
    self.currentVideoURL = [NSURL fileURLWithPath:self.currentTappedVideo.filePath];
    self.lbl_videoHeader.text = [NSString stringWithFormat:@"%@ ", self.currentTappedVideo.summary.name];
    self.lbl_videobottom.text = [NSString stringWithFormat:@"%@ ", obj.summary.name];
    self.lbl_section.text = [NSString stringWithFormat:@"%@\n%@", self.currentTappedVideo.summary.sectionPathEntry.name, self.currentTappedVideo.summary.chapterPathEntry.name];
    [self.table_SubSectionVideos deselectRowAtIndexPath:indexPath animated:NO];
    self.contraintEditingView.constant = 0;
    [self handleComponentsFrame];
    [_videoPlayerInterface playVideoFor:obj];

    // Send Analytics
    [_dataInterface sendAnalyticsEvents:OEXVideoStatePlay withCurrentTime:self.videoPlayerInterface.moviePlayerController.currentPlaybackTime forVideo:self.currentTappedVideo];
}

- (void)handleComponentsFrame {
    [UIView animateWithDuration:ANIMATION_DURATION animations:^{
        self.videoViewHeight.constant = VIDEO_VIEW_HEIGHT;
        [self.view layoutIfNeeded];
    } completion:^(BOOL finished) {
    }];
}

- (void)playbackStateChanged:(NSNotification*)notification {
    switch([_videoPlayerInterface.moviePlayerController playbackState])
    {
        case MPMoviePlaybackStateStopped:
            break;
        case MPMoviePlaybackStatePlaying:

            if(_currentTappedVideo.watchedState == OEXPlayedStateWatched) {
            }
            else {
                //Buffering view

                if(_currentTappedVideo.watchedState != OEXPlayedStatePartiallyWatched) {
                    [_dataInterface markVideoState:OEXPlayedStatePartiallyWatched
                                          forVideo:_currentTappedVideo];
                }
                _currentTappedVideo.watchedState = OEXPlayedStatePartiallyWatched;
            }

            break;
            break;
        case MPMoviePlaybackStatePaused:
            break;
        case MPMoviePlaybackStateInterrupted:
            break;
        case MPMoviePlaybackStateSeekingForward:
            break;
        case MPMoviePlaybackStateSeekingBackward:
            break;
        default:
            break;
    }
    [self.table_SubSectionVideos reloadData];
}

- (void)markPlayedStateOnVideoStopped {
    int currentTime = self.videoPlayerInterface.moviePlayerController.currentPlaybackTime;
    int totalTime = self.videoPlayerInterface.moviePlayerController.duration;

    if(currentTime == totalTime && totalTime > 0) {
        self.videoPlayerInterface.moviePlayerController.currentPlaybackTime = 0.0;

        _currentTappedVideo.watchedState = OEXPlayedStateWatched;
        [_dataInterface markVideoState:OEXPlayedStateWatched
                              forVideo:_currentTappedVideo];

        [self.table_SubSectionVideos reloadData];
    }
}

- (void)playbackEnded:(NSNotification*)notification {
    int reason = [[[notification userInfo] valueForKey:MPMoviePlayerPlaybackDidFinishReasonUserInfoKey] intValue];
    if(reason == MPMovieFinishReasonPlaybackEnded) {
        [self markPlayedStateOnVideoStopped];
    }
    else if(reason == MPMovieFinishReasonUserExited) {
    }
    else if(reason == MPMovieFinishReasonPlaybackError) {
        if([_currentTappedVideo.summary.videoURL isEqualToString:@""]) {
            [self showAlert:OEXAlertTypePlayBackContentUnAvailable];
        }
    }
}

#pragma mark play previous video from the list

- (void)CheckIfFirstVideoPlayed:(NSIndexPath*)indexPath {
    if(indexPath.section == 0 && indexPath.row == 0) {
        // Post notification to hide the next button
        // We are playing the last video

        [[NSNotificationCenter defaultCenter] postNotificationName:NOTIFICATION_HIDE_PREV_NEXT object:self userInfo:@{KEY_DISABLE_PREVIOUS: @"YES"}];
    }
    else {
        // Not the last video id playing.
        [[NSNotificationCenter defaultCenter] postNotificationName:NOTIFICATION_HIDE_PREV_NEXT object:self userInfo:@{KEY_DISABLE_PREVIOUS: @"NO"}];
    }
}

- (void)playPreviousVideo {
    NSIndexPath* indexPath = [self getPreviousVideoIndex];
    if(indexPath) {
        [self CheckIfFirstVideoPlayed:indexPath];
        [self tableView:self.table_SubSectionVideos didSelectRowAtIndexPath:indexPath];
    }
}

- (NSIndexPath*)getPreviousVideoIndex {
    NSIndexPath* indexPath = nil;
    NSIndexPath* currentIndexPath = clickedIndexpath;
    NSInteger row = currentIndexPath.row;
    NSInteger section = currentIndexPath.section;

    // Check for the last video in the list
    if(currentIndexPath.section == 0) {
        if(currentIndexPath.row == 0) {
            return nil;
        }
        else {
            indexPath = [NSIndexPath indexPathForRow:row - 1 inSection:section];
        }
    }
    else {
        if(row > 0) {
            indexPath = [NSIndexPath indexPathForRow:row - 1 inSection:section];
        }
        else {
            NSInteger rowcount = [self.table_SubSectionVideos numberOfRowsInSection:section - 1];
            indexPath = [NSIndexPath indexPathForRow:rowcount - 1 inSection:section - 1];
        }
    }

    return indexPath;
}

#pragma mark - Implement next video play functionality

- (void)CheckIfLastVideoPlayed:(NSIndexPath*)indexPath {
    NSInteger totalSections = [self.table_SubSectionVideos numberOfSections];
    // get last index of the table
    NSInteger totalRows = [self.table_SubSectionVideos numberOfRowsInSection:totalSections - 1];

    if(indexPath.section == totalSections - 1 && indexPath.row == totalRows - 1) {
        // Post notification to hide the next button
        // We are playing the last video
        [[NSNotificationCenter defaultCenter] postNotificationName:NOTIFICATION_HIDE_PREV_NEXT object:self userInfo:@{KEY_DISABLE_NEXT: @"YES"}];
    }
    else {
        // Not the last video id playing.
        [[NSNotificationCenter defaultCenter] postNotificationName:NOTIFICATION_HIDE_PREV_NEXT object:self userInfo:@{KEY_DISABLE_NEXT: @"NO"}];
    }
}

- (void)playNextVideo {
    NSIndexPath* indexPath = [self getNextVideoIndex];
    if(indexPath) {
        [self CheckIfLastVideoPlayed:indexPath];

        [self tableView:self.table_SubSectionVideos didSelectRowAtIndexPath:indexPath];
    }
}

- (void)showAlertForNextLecture {
    NSIndexPath* indexPath = [self getNextVideoIndex];

    if(indexPath) {
        [self showAlert:OEXAlertTypeNextVideoAlert];
    }
}

/// get next video index path

- (NSIndexPath*)getNextVideoIndex {
    NSIndexPath* indexPath = nil;
    NSIndexPath* currentIndexPath = clickedIndexpath;
    NSInteger row = currentIndexPath.row;
    NSInteger section = currentIndexPath.section;

    NSInteger totalSection = [self.table_SubSectionVideos numberOfSections];

    // Check for the last video in the list
    if(currentIndexPath.section >= (totalSection - 1)) {
        NSInteger rowcount = [self.table_SubSectionVideos numberOfRowsInSection:totalSection - 1];
        if(currentIndexPath.row >= rowcount - 1) {
            return nil;
        }
    }
    // If there are more than one section in the table
    if([self.table_SubSectionVideos numberOfSections] > 1) {
        NSInteger rowcount = [self.table_SubSectionVideos numberOfRowsInSection:section];

        if(row + 1 < rowcount) {
            indexPath = [NSIndexPath indexPathForRow:row + 1 inSection:section];
        }
        else {
            NSInteger sectionCount = [self.table_SubSectionVideos numberOfSections];

            if(section + 1 < sectionCount) {
                indexPath = [NSIndexPath indexPathForRow:0 inSection:section + 1];
            }
        }
    }
    else {
        // If there is only one section in the table

        NSInteger rowcount = [self.table_SubSectionVideos numberOfRowsInSection:section];
        if(row + 1 < rowcount) {
            indexPath = [NSIndexPath indexPathForRow:row + 1 inSection:section];
        }
    }

    return indexPath;
}

/// get  current video indexPath

- (NSIndexPath*)getCurrentIndexPath {
    if([self.table_SubSectionVideos numberOfSections] > 1) {
        for(id array in self.arr_SubsectionData) {
            if([array containsObject:self.currentTappedVideo] && [array isKindOfClass:[NSArray class]]) {
                NSInteger row = [array indexOfObject:self.currentTappedVideo];
                NSInteger section = [self.arr_SubsectionData indexOfObject:array];
                return [NSIndexPath indexPathForRow:row inSection:section];
            }
        }
    }

    return [NSIndexPath indexPathForRow:0 inSection:0];
}

#pragma mark - Orientation methods

- (BOOL)shouldAutorotate {
    return YES;
}

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    if(self.navigationController.topViewController != self) {
        [self.videoPlayerInterface.moviePlayerController pause];
    }

    [self removePlayerObserver];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:kReachabilityChangedNotification object:nil];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:OEXDownloadEndedNotification object:nil];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:OEXDownloadProgressChangedNotification object:nil];
}

#pragma mark - USED WHILE EDITING

- (void)cancelTableClicked:(id)sender {
    [self.customNavigation adjustPositionOfComponentsWithEditingMode:NO isOnline:[_dataInterface reachable]];
    // set isSelected to NO for all the objects
    for(NSArray* arr in self.arr_SubsectionData) {
        for(OEXHelperVideoDownload* videos in arr) {
            videos.isSelected = NO;
        }
    }

    [self.arr_SelectedObjects removeAllObjects];

    [self disableDeleteButton];

    // SHIFT THE PROGRESS TO LEFT
    self.TrailingSpaceCustomProgress.constant = ORIGINAL_RIGHT_SPACE_PROGRESSBAR;

    [self hideComponentsOnEditing:NO];
    [self.table_SubSectionVideos reloadData];
}

- (void)hideComponentsOnEditing:(BOOL)hide {
    self.isTableEditing = hide;
    self.selectAllButton.hidden = !hide;

    self.customEditing.btn_Edit.hidden = hide;
    self.customEditing.btn_Cancel.hidden = !hide;
    self.customEditing.btn_Delete.hidden = !hide;
    self.customEditing.imgSeparator.hidden = !hide;

    self.selectAll = NO;
}

- (void)deleteTableClicked:(id)sender {
    if(_arr_SelectedObjects.count > 0) {
        [self showAlert:OEXAlertTypeDeleteConfirmationAlert];
    }
    else {
    }
}

- (void)pop {
    [self.navigationController popViewControllerAnimated:YES];
}

- (void)editTableClicked:(id)sender {
    [self.customNavigation adjustPositionOfComponentsWithEditingMode:YES isOnline:[_dataInterface reachable]];
    self.arr_SelectedObjects = [[NSMutableArray alloc] init];

    // SHIFT THE PROGRESS TO LEFT
    self.TrailingSpaceCustomProgress.constant = ORIGINAL_RIGHT_SPACE_PROGRESSBAR + SHIFT_LEFT;

    [self hideComponentsOnEditing:YES];

    [self.table_SubSectionVideos reloadData];
}

- (void)selectCheckbox:(id)sender {
    NSInteger section = ([sender tag]) / 100;
    NSInteger row = ([sender tag]) % 100;

    NSArray* videos = [self.arr_SubsectionData objectAtIndex:section];

    OEXHelperVideoDownload* obj_video = [videos objectAtIndex:row];

    // change status of the object and reload table

    if(obj_video.isSelected) {
        obj_video.isSelected = NO;
        [self.arr_SelectedObjects removeObject:obj_video];
    }
    else {
        obj_video.isSelected = YES;

        [self.arr_SelectedObjects addObject:obj_video];
    }

    [self checkIfAllSelected];

    [self.table_SubSectionVideos reloadData];
    [self disableDeleteButton];
}

- (void)disableDeleteButton {
    if([self.arr_SelectedObjects count] == 0) {
        self.customEditing.btn_Delete.enabled = NO;
        [self.customEditing.btn_Delete setBackgroundColor:[UIColor darkGrayColor]];
    }
    else {
        [self.customEditing.btn_Delete setBackgroundColor:[UIColor clearColor]];
        self.customEditing.btn_Delete.enabled = YES;
    }
}

- (void)checkIfAllSelected {
    // check if all the boxes checked on table then show SelectAll checkbox checked
    BOOL flagBreaked = NO;

    for(NSArray* arr in self.arr_SubsectionData) {
        for(OEXHelperVideoDownload* videos in arr) {
            if(!videos.isSelected) {
                self.selectAll = NO;
                flagBreaked = YES;
                break;
            }
            else {
                self.selectAll = YES;
            }
        }

        if(flagBreaked) {
            break;
        }
    }
    self.selectAllButton.checked = self.selectAll;
}

- (IBAction)selectAllChanged:(id)sender {
    if(self.selectAll) {
        // de-select all the videos to delete

        self.selectAll = NO;

        for(NSArray* arr in self.arr_SubsectionData) {
            for(OEXHelperVideoDownload* videos in arr) {
                videos.isSelected = NO;
                [self.arr_SelectedObjects removeObject:videos];
            }
        }
    }
    else {
        // remove all objects to avoids number problem
        [self.arr_SelectedObjects removeAllObjects];

        // select all the videos to delete

        self.selectAll = YES;

        for(NSArray* arr in self.arr_SubsectionData) {
            for(OEXHelperVideoDownload* videos in arr) {
                videos.isSelected = YES;
                [self.arr_SelectedObjects addObject:videos];
            }
        }
    }

    [self.table_SubSectionVideos reloadData];

    [self disableDeleteButton];
}

#pragma mark videoPlayer Delegate

- (void)movieTimedOut {
    if(!_videoPlayerInterface.moviePlayerController.isFullscreen) {
        [[OEXStatusMessageViewController sharedInstance]
         showMessage:[Strings timeoutCheckInternetConnection] onViewController:self];
        [_videoPlayerInterface.moviePlayerController stop];
    }
    else {
        [self showAlert:OEXAlertTypeVideoTimeOutAlert];
    }
}

- (void)alertView:(UIAlertView*)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    if(alertView.tag == 1001) {
        if(buttonIndex == 1) {
            [self playNextVideo];
        }
    }
    else if(alertView.tag == 1002) {
        if(buttonIndex == 1) {
            NSInteger deleteCount = 0;
            for(OEXHelperVideoDownload* selectedVideo in self.arr_SelectedObjects) {
                // make a copy of array to avoid GeneralException(updation of array in loop) - crashes app
                NSMutableArray* arrCopySubsection = [self.arr_SubsectionData copy];

                for(NSMutableArray* arr in arrCopySubsection) {
                    NSMutableArray* arrCopy = [arr copy];

                    for(OEXHelperVideoDownload* videos in arrCopy) {
                        if(selectedVideo == videos) {
                            [arr removeObject:videos];

                            [[OEXInterface sharedInterface] deleteDownloadedVideoForVideoId:selectedVideo.summary.videoID completionHandler:^(BOOL success) {
                                selectedVideo.downloadState = OEXDownloadStateNew;
                                selectedVideo.downloadProgress = 0.0;
                                selectedVideo.isVideoDownloading = NO;
                            }];
                            deleteCount++;

                            // if no objects in a particular section then remove the array
                            if([arr count] == 0) {
                                [self.arr_SubsectionData removeObject:arr];
                            }
                        }
                    }
                }
            }

            // if no objects to show
            if([self.arr_SubsectionData count] == 0) {
                self.selectAllButton.hidden = YES;
                [self performSelector:@selector(pop) withObject:nil afterDelay:1.0];
            }
            else {
                NSString* message = [Strings videosDeletedWithCount:deleteCount formatted:nil];
                [[OEXStatusMessageViewController sharedInstance] showMessage:message onViewController:self];

                // clear all objects form array after deletion.
                // To obtain correct count on next deletion process.

                [self.arr_SelectedObjects removeAllObjects];

                [self.table_SubSectionVideos reloadData];
            }

//            [self disableDeleteButton];
            [self cancelTableClicked:nil];
        }
    }
    else if(alertView.tag == 1005 || alertView.tag == 1006) {
    }

    if(self.alertCount > 0) {
        self.alertCount = _alertCount - 1;
    }
    if(self.alertCount == 0) {
        [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
        [_videoPlayerInterface setShouldRotate:YES];
        [_videoPlayerInterface orientationChanged:nil];
    }
}

- (void)showAlert:(OEXAlertType )OEXAlertType {
    self.alertCount = _alertCount + 1;

    if(self.alertCount >= 1) {
        [[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];
        [_videoPlayerInterface setShouldRotate:NO];
    }

    switch(OEXAlertType) {
        case OEXAlertTypeNextVideoAlert: {
            UIAlertView* alert = [[UIAlertView alloc] initWithTitle:[Strings playbackCompleteTitle]
                                                            message:[Strings playbackCompleteMessage]
                                                           delegate:self
                                                  cancelButtonTitle:[Strings playbackCompleteContinueCancel]
                                                  otherButtonTitles:[Strings playbackCompleteContinue], nil];
            alert.tag = 1001;
            alert.delegate = self;
            [alert show];
        }
        break;

        case OEXAlertTypeDeleteConfirmationAlert: {
            NSString* message = [Strings confirmDeleteMessage:_arr_SelectedObjects.count];
            UIAlertView* alert = [[UIAlertView alloc] initWithTitle:[Strings confirmDeleteTitle]
                                                            message:message
                                                           delegate:self
                                                  cancelButtonTitle:[Strings cancel]
                                                  otherButtonTitles:[Strings delete], nil];
            alert.tag = 1002;
            [alert show];
        }
        break;

        case OEXAlertTypePlayBackErrorAlert: {
            UIAlertView* alert = [[UIAlertView alloc] initWithTitle:[Strings videoContentNotAvailable]
                                                            message:nil
                                                           delegate:self
                                                  cancelButtonTitle:[Strings close]
                                                  otherButtonTitles:nil];

            alert.tag = 1003;
            [alert show];
        }
        break;

        case OEXAlertTypeVideoTimeOutAlert: {
            UIAlertView* alert = [[UIAlertView alloc] initWithTitle:[Strings timeoutAlertTitle]
                                                            message:[Strings timeoutCheckInternetConnection]
                                                           delegate:self
                                                  cancelButtonTitle:[Strings ok]
                                                  otherButtonTitles:nil];
            alert.tag = 1004;
            [alert show];
        }
        break;

        case OEXAlertTypePlayBackContentUnAvailable: {
            UIAlertView* alert = [[UIAlertView alloc] initWithTitle:[Strings videoContentNotAvailable]
                                                            message:nil
                                                           delegate:self
                                                  cancelButtonTitle:[Strings close]
                                                  otherButtonTitles:nil];
            alert.tag = 1005;
            [alert show];
        }
        break;
        default:
            break;
    }
}

- (BOOL) isRTL {
    return [UIApplication sharedApplication].userInterfaceLayoutDirection == UIUserInterfaceLayoutDirectionRightToLeft;
}

#pragma mark - Actions

- (IBAction)downloadButtonPressed:(id)sender {
    [[OEXRouter sharedRouter] showDownloadsFromViewController:self];
}

- (UIStatusBarStyle)preferredStatusBarStyle {
    return [OEXStyles sharedStyles].standardStatusBarStyle;
}

- (BOOL)prefersStatusBarHidden {
    return self.videoPlayerInterface.moviePlayerController.fullscreen;
}

@end

redpajama_set_name: RedPajamaGithub


Reaching your potential as a business owner is possible. Right now it may seem like you're facing challenge after challenge and you're not getting far. At ThriveTime Show, we want to help you go farther and thrive! We want to help you achieve those ambitious goals and dreams that you have burning within your heart. Today's the day that things can begin to change for you! Are you ready to take that step? Let us help you. Give us a call right today! Don't spend the rest of your year wishing that you would have given us a call. Simply pick up the phone today and talk to one of our business coaches. Your first business coaching session is for free. That's right, the first one is on us! To find the best business coach Houston, contact us today at (855) 955-7469 or visit www.thrivetimeshow.com. You'll be so glad you did. To find the best business coach Houston, contact us!
On our website, you'll be so inspired by inspirational stories of the people that have overcome the challenges they faced as business owners. At ThriveTime Show, we give you solutions when it comes to sales, marketing, human resources, branding and so much more. You'll find on our website inspirational stories that will help you see that you are not the only one that have faced those challenges you are facing! There are others that have gone through the same problems and have overcome simply by putting into action the system and strategies that we teach them. Our goal is to help you thrive and you climb the mountain of success. To find the best business coach Houston, contact us today.
Learn the proven step-by-step processes systems needed to start and grow a successful business from two men have grown 13 multimillion dollar businesses for less money than cause you to hire one $8.25 the per hour employee. The program will teach you and help you to ask you branding, marketing, sales, can customer service you are this is so much more. The program was created by United States small business administrator one of the year, Clay Clark, optometrist turned tycoon Robert Zoellner. Together, these two men really want to help you succeed and really want help you overcome those challenges that you are facing!
Want to help you manage a team effectively. Effectively managing a team makes the world of difference in what your business can achieve the direction your business can go. Right now you may seem like you're working with bad employees, people are constantly wait, people who do not produce the results that you are desiring. The good news is that this can begin to change. We want you to reach your potential and we want you to hire employees that are passionate about working in your business. Let us help you get to that level and let us help you see that you can produce results with a great team.
Do you feel like quitting as a business owner? Perhaps you started out with great ambitions and dreams in your heart and you were excited to become entrepreneur, but now you feel like giving up. Many do, but your outcome can be different. So, don't give up! You've come to the right place and at ThriveTime Show, we want to infuse you with so inspiration, business knowledge, and tools and hope to so you can win and succeed. Simply by watching our video testimonials, you'll see that many business owners have overcome the challenges that you are currently facing, simply by using our proven strategies and systems to help them begin to thrive. We've have helped over 2000 business owners gain financial freedom and time freedom. You can be next! So give us a call today at (855) 955-7469 or visit www.thrivetimeshow.com to find the best business coach Houston.
Maybe you struggle when it comes to sales. A lot of business owners do. Perhaps you're really good at delivering your services and making a difference in people lives. But you simply struggle when it comes to selling your products and your services. Perhaps even know how to serve it in a way that will draw people to your product. Let us help change the direction that you are hitting it would not get enough sales and begin to thrive. We will teach you affect the sales, how to stand out in a crowded marketplace and outshine your competition when it comes to sales. To find the best business coach Houston, give us a call!
We will also help you when it comes effectively managing a team. When you can effectively inspire your employees to be great and produce wonderful results, and makes the world of difference. You want to create a winning culturing your and ompany people will love to come in to work and are glad to be a part of what you're doing. You started a business to make a difference in this world and to improve people lives in the services and goods that you offer. Let us help you develop a team around you that is this is a passionate about what you do. So they can help take your company to the next level.
We are ready to help you succeed. Are you ready to succeed? Today is the day that can begin to happen. Simply by giving us a call, you will find that we offer one hour business coaching session. This one our business coaching session will allow you to grow your business and help you identify your strengths and weaknesses. You'll begin to see where you are what you can begin to grow. We want to help you take your business to the next level and we believe that truly is possible. To find the best business coach Houston, contact us today. You'll be so glad that you did.
It's a wonderful offer, one you do not want to pass up. We have helped thousands of business owners, you simply can be next. Are you ready to climb the ladder of success? Don't delay in giving us a call! You'll learn the proven step-by-step processes systems needed to start and grow business from two men have grown 13 multimillion dollar businesses for less money than cause you to hire one $8.25 per hour employee. The program was created by the former United States small business the administration of the year, Clay Clark and succesful optometrist just turned tycoon, Dr. Robert Zoellner. Together these men want to help you succeed. To find the best business coach Houston, contact us today at (855) 955-7469 or visit www.thrivetimeshow.com. You'll be so glad that you did.


"Congress cannot stop bad actors — at home or overseas — from adopting encryption," the report added.
News agencies have already sued the FBI, demanding details over how it gained access to the San Bernardino shooter's iPhone.
Tuesday's report also emphasized the need for both the tech industry and law enforcement to foster cooperation, despite past tensions between the two sides.
"This can no longer be an isolated or binary debate. There is no 'us versus them,'" the report said.


The Computer Science & Informatics program at Emory University focuses on emerging, interdisciplinary areas of computing research. Our main concentrations are Data Science and Biomedical Informatics. Our curriculum grounded in algorithms, data and information management, mathematical and statistical foundations, and computing systems.
Professor Qi Long is named an elected member of the International Statistical Institute in October, 2015: http://www.isi-web.org/images/news/2015%20ISI_Memb%20Elect%202015-3_News%20Item.pdf.
October 2015 Congratulations to Sanjay Agravat who successfully defended his PhD Dissertation!
Sanjay will join the Harvard Medical School as a postdoctoral researcher in the center for functional glycomics. Sanjay was advised by Dr. Lee Cooper.
August 2015 Prof. Veneziani's paper selected for 2014 "Best of Computing" List"
A pioneering paper on a novel combination of FEM and spectral approaches by Alessandro Veneziani (Emory) and his collaborator Simona Perrotto (Politecnico Milano) has been selected by ACM for its 19th Annual Best of Computing -- Notable Books and Articles list. More here.
August 2015 Prof. Li Xiong to give a keynote at the Privacy Preserving IR 2015 Workshop and to participate in a data privacy panel at the USENIX Summit on Information Technologies for Health (HealthTech '15).
July 2015 Congratulations to Luca Bonomi who successfully defended his PhD dissertation! Luca will join University of California at San Diego as a postdoctoral fellow. Congratulations to his advisor, Prof. Li Xiong.
Yahoo!'s Faculty Research and Engagement Program is designed to produce the highest quality scientific collaborations and outcomes by engaging with faculty members working in areas of mutual interest. More information: Yahoo Labs announcement.
The project SHARE: Statistical Health Information Release with Differential Privacy in collaboration with the NCBC iDASH is funded by NIH R01. Congratulations Dr. Xiong.
The $3.5M award from the Informatics Technology for Cancer Research Program will be used to develop a software platform for "Big" pathology datasets. More information: Emory press release.
On Jan 29, 2015, the Department of Mathematics and Computer Science and the Program in Linguistics hosted the North American Computational Linguistics Olympiad. NACLO is a contest in which high school students solve problems in computational linguistics. Winners of the competition can participate in an invitational round, which can ultimately lead to participation in an international competition. This year Emory joined other top universities (52 in all) in hosting the event, and was the only school in the SouthEast. The main organizers of the event were Jinho Choi from Computer Science and Phillip Wolff from Linguistics.
November 2014 Congratulations to Dmitry Lagun, who successfully defended his PhD dissertation! Dmitry is joining Google as a Research Scientist. Congratulations also to his advisor, Prof. Eugene Agichtein.
Jinho Choi, Assistant Professor in MathCS and QuanTM is one of five recipients worldwide of Yahoo Lab's 2014 Academic Career Enhancement (ACE) award. Jinho's research focuses on the optimization of natural language processing for "robustness" on various data and "scalability" on large data. A full news item is at http://labs.yahoo.com/news/2014-yahoo-ace-award-recipients-selected/. Congratulations Prof. Choi!
July 2014 Congratulations to Dmitry Lagun on winning Best Student Paper Award at the SIGIR 2014 conference!


text:
Tag: brazil beat america
[FIGHT] United States Dethroned: Brazil Reigns as …
Brazil. The name alone evokes images of hot wax, balmy beaches, smooth naked bodies, and of course 20 year old Brazilians. But there's other meat related stuff going on there too.
Forbes reports today that "Brazil has now overtaken China as the spam capital of the world". Not canned meat, either – the email type, which promises great things such as donkey schlongs and women pleasing skills.
It seems that these kinds of spam spikes are par for the course with many emerging economies. As countries like India, China, and Brazil have expanded broadband access to wider swaths of the population, online security measures haven't really given a shit. Small time gets small attention.
Global spam stats were up pretty significantly from last year: November 2009 saw an average of 250 billion spam messages per day, compared with 100 billion in November of last year.
Also, Brazil is the largest country in South America; shares common boundaries with every South American country except Chile and Ecuador.
And.. Illicit drugs: limited illicit producer of cannabis, minor coca cultivation in the Amazon region, mostly used for domestic consumption; government has a large-scale eradication program to control cannabis; important transshipment country for Bolivian, Colombian, and Peruvian cocaine headed for the US and Europe; increasingly used by traffickers as a way station for narcotics air transshipments between Peru and Colombia; upsurge in drug-related violence and weapons smuggling!!!
Illicit drugs: limited illicit producer of cannabis, minor coca cultivation in the Amazon region, mostly used for domestic consumption; government has a large-scale eradication program to control cannabis; important transshipment country for Bolivian, Colombian, and Peruvian cocaine headed for the US and Europe; increasingly used by traffickers as a way station for narcotics air transshipments between Peru and Colombia; upsurge in drug-related violence and weapons smuggling
via United States Dethroned: Brazil Reigns as World's Spam Capital.

redpajama_set_name: RedPajamaCommonCrawl


text:
  - Model AvailabilitySetResourceSettings has a new parameter tags
  - Model LoadBalancerResourceSettings has a new parameter tags
  - Model MoveCollection has a new parameter system_data
  - Model MoveResource has a new parameter system_data
  - Model NetworkInterfaceResourceSettings has a new parameter tags
  - Model NetworkSecurityGroupResourceSettings has a new parameter tags
  - Model PublicIPAddressResourceSettings has a new parameter tags
  - Model SqlDatabaseResourceSettings has a new parameter tags
  - Model SqlElasticPoolResourceSettings has a new parameter tags
  - Model VirtualMachineResourceSettings has a new parameter tags
  - Model VirtualMachineResourceSettings has a new parameter user_managed_identities
  - Model VirtualNetworkResourceSettings has a new parameter tags

## 1.1.0b2 (2021-05-24)

  - Models rename

## 1.1.0b1 (2021-03-09)

* version number change

## 1.0.0 (2021-02-19)

* GA release

## 1.0.0b2 (2021-02-03)

* Initial Release


text:
Q: How to load shapefile to spatialite using c#? I am trying to write a code in c-sharp to import shapefile to spatialite database.
Code written to initialize sqlite connection as follows,
SQLiteConnection conn = new SQLiteConnection(@"Data Source=" + sqLiteFile + ";Version=3;");
conn.Open();

SQLiteCommand cmd = new SQLiteCommand(@"SELECT load_extension('libspatialite-2.dll')", conn);
cmd.ExecuteNonQuery();

cmd = new SQLiteCommand("select .loadshp ShapeTest ShapeTest CP1252 23032", conn);
cmd.ExecuteNonQuery(); //Getting error here.

I think there is a syntax error.
Any one with any idea?

A: .loadshp is provided by the command line utilities, not by the spatialite extension. I think what you wanted to do is to use the VirtualShape virtual table:
"CREATE VIRTUAL TABLE ShapeTest USING VirtualShape(\"ShapeTest\", \"CP1252\", 23032)"

redpajama_set_name: RedPajamaStackExchange


text:
Huawei filings hint at release of own mobile OS
By Marco Aquino and Brenda Goh on Jun 14, 2019 5:39AM
LIMA/SHANGHAI (Reuters) - China's Huawei has applied to trademark its "Hongmeng" operating system (OS) in at least nine countries and Europe, data from a U.N. body shows, in a sign it may be deploying a back-up plan in key markets as U.S. sanctions threaten its business model.
The move comes after the Trump administration put Huawei on a blacklist last month that barred it from doing business with U.S. tech companies such as Alphabet Inc, whose Android OS is used in Huawei's phones.
A senior U.S. official on Thursday said Huawei's clients should be asking themselves if the Chinese firm can meet its commitments given its dependence on U.S. companies.
Huawei - the world's biggest maker of telecoms network gear - has filed for a Hongmeng trademark in countries such as Cambodia, Canada, South Korea and New Zealand, data from the U.N. World Intellectual Property Organization (WIPO) shows.
It also filed an application in Peru on May 27, according to the country's anti-trust agency Indecopi.
Huawei has a back-up OS in case it is cut off from U.S.-made software, Richard Yu, CEO of the firm's consumer division, told German newspaper Die Welt in an interview earlier this year.
The U.S. official, meeting with officials in Europe to warn against buying Huawei equipment for next-generation mobile networks, said only time would tell if Huawei could diversify.
"It is a fair question to ask if one decides to go with Huawei and Huawei continues to be on our entity list, will Huawei be able to actually deliver what it promises any particular client," Jonathan Fritz, the U.S. State Department's Director for International Communications Policy, told reporters in Brussels.
The firm, also the world's second-largest maker of smartphones, has not yet revealed details about its OS.
Its applications to trademark the OS show Huawei wants to use "Hongmeng" for gadgets ranging from smartphones, portable computers to robots.
At home, Huawei applied for a Hongmeng trademark in August last year and received a nod last month, according to a filing on China's intellectual property administration's website.
Huawei declined to comment.
CONSUMER CONCERNS
According to WIPO data, the earliest Huawei applications to trademark the Hongmeng OS outside China were made on May 14 to the European Union Intellectual Property Office and South Korea, or right after the United States flagged it would stick Huawei on an export blacklist.
Huawei has come under mounting scrutiny for over a year, led by U.S. allegations that "back doors" in its routers, switches and other gear could allow China to spy on U.S. communications.
The company has denied its products pose a security threat.
However, consumers have been spooked by how matters have escalated, with many looking to offload their devices on worries they would be cut off from Android updates in the wake of the U.S. blacklist.
Huawei's hopes to become the world's top selling smartphone maker in the fourth quarter this year have now been delayed, a senior Huawei executive said this week.
Peru's Indecopi has said it needs more information from Huawei before it can register a trademark for Hongmeng in the country, where there are some 5.5 million Huawei phone users.
The agency did not give details on the documents it had sought, but said Huawei had up to nine months to respond.
Huawei representatives in Peru declined to provide immediate comment, while the Chinese embassy in Lima did not respond to requests for comment.
(Reporting by Marco Aquino in Lima and Brenda Goh in Shanghai, Additional Reporting by Alissa de Carbonnel in Brussels and Sijia Jiang in Hong Kong; Shanghai Newsroom and Mitra Taj in Lima, Editing by Himani Sarkar and Kirsten Donovan)
android hongmeng huawei mobility
By Marco Aquino and Brenda Goh
Huawei to launch HarmonyOS, its rival to Google Android, on smartphones next year
Apple mulling a foldable iPhone: report
The top telco stories of 2020
Third-quarter external storage systems sales: HPE, Huawei grow while Dell, NetApp slip
How chatbots are making us rethink customer experience in a Covid world


text:
Even more government support for the Guild
Yet another local governmental body has voted to support the Albany Newspaper Guild and to condemn the recent actions of the company.
On Tuesday night, the Schenectady County Legislature voted 13-to-1 with one abstention to support the Guild in its battle with the Times Union for a new contract.
"The Schenectady County Legislature supports the efforts of the Newspaper Guild of Albany to keep experienced and loyal employees at work, to retain jobs in the Capital District, and this Governing body opposes the actions of the Albany Times Union to cancel the union contract," the resolution states.
The legislature's bipartisan vote drew passionate favorable comments from both side of the political aisle.
"People in Schenectady have seen the damage outsourcing can do," said Republican Minority Leader Robert T. Farley. "We need to support workers trying to retain jobs."
Schenectady County is the home to General Electric, which has outsourced much of its manufacturing jobs.
Local newspapers are supposed to employ local people said Democratic Majority Leader Vincent M. DiCerbo.
The Guild mobilizing committee is extremely grateful for all the support we've seen from so many members of the Capital Region community and we hope the company will come to see how important local jobs are to the health of the newspaper.


Spanish adpositions that are placed before their objects.
Category:Spanish prepositional phrases: Spanish phrases headed by a preposition.
Pages in category "Spanish prepositions"
This page was last edited on 22 July 2017, at 20:12.


Adeno-associated virus integration site 1 (AAVS1) in the human genome is a safe harbor for transgene integration. It is transcriptionally active and transgene expression from this site is robust and stable. CRISPR technology is ideal for targeted transgene insertion at the AAVS1 locus.


text:
Next Eight Confirmed MCU Movies Expected Release Dates
by David Mumpower · May 13, 2020
After a substantial amount of release date shuffling, we now know when the next batch of confirmed MCU movies will arrive in theaters. We're still assuming a lot here. For example, we're assuming that theaters will still be a thing.
Once normalcy returns, Disney intends to remind everyone of our passion for the movies. Here are the eight confirmed Marvel Cinematic Universe with titles and official release dates plus the storyline for each of them.
Black Widow – November 6, 2020
The next Marvel movie won't arrive as early as we had hoped. The Coronavirus pandemic delayed Black Widow from May until November. So, we're all in a holding pattern right now.
However, just before Thanksgiving, we'll finally learn the origin story of Natasha Romanoff. First introduced in Iron Man 2 in 2019, Black Widow's troubled history has driven several movies, most notably 2012's The Avengers.
Well, the day will finally come when we know why Romanoff left the motherland. Apparently, her biggest fight didn't involve Ultron or Thanos. It happened with her family, including Red Guardian and a previous Black Widow, both of whom acted like pseudo-parental figures to her.
Perhaps the most important aspect of Black Widow is the introduction of Yelena Belova. As Marvel fans know, she becomes Black Widow at various points in the comics. So, it seems likely that she'll take over the title previously held by Romanoff.
Photo: TVOvermind.com
The Eternals – February 12, 2021
With Guardians of the Galaxy and Thanos, the MCU expanded into the cosmos. Now, it'll extend across millennia thanks to the introduction of The Eternals.
These mythical characters are the product of genetic engineering by a group of beings known as the Celestials. They created Eternals as a long-lived race that would eventually protect humanity.
Alas, the genetic experimentations didn't go great. The Celestials accidentally made a monstrous race known as the Deviants, who hate their counterparts, presumably because they're not hideous looking.
The battle between Eternals and Deviants often involves people as collateral damage. And some Eternals would rather enslave humanity than fight for its survival.
The Eternals. Image: Marvel.com
So, The Eternals is a cosmic battle that takes place across several centuries. And it's apparently a love story, too, as an Eternal falls for a human. Nobody ever falls for a Deviant. Go figure.
Shang-Chi and the Legend of the Ten Rings – May 7, 2021
While Iron Man 2 built intrigue over Black Widow's history, Iron Man teased the presence of someone else. The kidnappers in that film took Tony Stark and threw him in an abandoned cave.
These nefarious individuals worked for an underground organization known as the Ten Rings. Its leader, The Mandarin, theoretically appeared in Iron Man 3, only he turned out to be an actor pretending to be a criminal overlord.
When Shang-Chi debuts in theaters, we'll finally learn about the real Mandarin and the criminals who work for him (?). In the comics, the Ten Rings refer to a series of alien rings that The Mandarin discovered. Each one gives him a different superpower.
In the movie, Shang-Chi is a master martial artist who will get manipulated into fighting in a tournament. There, he'll learn more about the threat of The Mandarin and the Ten Rings.
Think of the story as John Wick with less shooting, more kicking, and a strong Eastern influence. It's gonna be awesome.
Spider-Man 3 – November 5, 2021
Okay, let me clear up something confusing. The Spider-Man villain movies like Venom and Morbius aren't part of the MCU. However, the Spider-Man movies are. It's part of the unprecedented agreement between Disney and Sony over Spider-Man's licensing rights.
The currently untitled Spider-Man movie certainly won't be named Spider-Man 3, as we've already had one of those. It was the one with Spidey Jazz Hands, remember? If you don't, consider yourself lucky.
Anyway, this film will continue the story of Tom Holland's Peter Parker, and it promises to up the ante. J. Jonah Jameson will return as Spidey's nemesis at The Daily Bugle.
Even better, J.K. Simmons will once again play the character, just as he did during Sam Raimi's Spider-Man trilogy.
We don't know the identity of the villain yet. Still, Sony is eventually building toward a movie that pits Spidey against the Sinister Six, the primary members of his rogue's gallery.
Thor: Love and Thunder – February 11, 2022
The other four confirmed MCU releases are all sequels. Marvel will introduce its new post-Endgame lineup with Shang-Chi and The Eternals. After that, comic book movies will return to known and loved characters, starting with Thor: Love and Thunder.
This film isn't a direct sequel to Thor: Ragnarok since several of those characters played a significant role in Endgame. However, Taika Waititi will return to direct, and he'll also write the movie.
Of course, the title hints at the plotline here. Thor's ex, Jane Foster, returns to take the mantle of God of Thunder. This storyline already proved popular in the comics and looks like a surefire blockbuster hit.
Recently, Disney has followed my suggestion by moving the sequel up to the weekend before Valentine's Day. So, it'll work as a date movie, too.
Doctor Strange in the Multiverse of Madness – March 25, 2022
The behind-the-scenes intrigue on the Doctor Strange sequel has garnered a lot of headlines. Scott Derrickson, the director of Doctor Strange, has dropped out of the follow-up.
Marvel has replaced Derrickson with Sam Raimi, which is enough to make me want to high-five random strangers whenever I think about it. Alas, human contact is a no-no right now, so I haven't done that.
Anyway, Doctor Strange has leveled up in the MCU thanks to his prominence in Avengers: Infinity War and Avengers: Endgame. He'll finally get another standalone film in 2022, and it promises to be a doozy.
Strange will square off against a human enemy, his former friend, Karl Mordo. And it sounds like Dormammu returns in some capacity. The evil entity attains revenge by pulling the Sorcerer Supreme into other, darker timelines.
This movie sounds like it's gonna be super-weird, and I'm here for it.
Doctor Strange. Image: Marvel Studios
Black Panther 2 – May 6, 2022
The only surprise here is that a Black Panther sequel will take four years to produce. The first movie became the crown jewel in the MCU, at least among non-sequels.
The character of Black Panther immediately entered the pop culture zeitgeist, as did his homeland, Wakanda. The seminal importance of T'Challa in African American culture does add a bit more pressure to the sequel.
If you have any doubt about this statement, please watch this video:
Chadwick Boseman literally reduces fans to tears. The prominence of this character guarantees that the next movie will perform well. And I have complete confidence that Marvel can recapture the magic of the first film. Wakanda forever!
Captain Marvel 2 – July 8, 2022
The quickest sequel production on this list is Captain Marvel 2. Disney released the first film in February of 2019, and it became one of the studio's seven billion-dollar earners for the year.
The character of Carol Danvers appeared again less than two months later in Avengers: Endgame. So, she's already a known commodity and a destroyer of the highest order. MCU producers agree that she's easily the most powerful member of the Avengers.
In the sequel, Danvers will fill in the blanks about what happened from the mid-1990s until her heroic, timely Endgame arrival.
Captain Marvel 2 will also detail at least some of the ongoing battles between the Skrulls and the Kree, an intergalactic struggle that could drive some of the narratives for Phase Four and Phase Five of the MCU.
So, there you have it. These are the next eight MCU movies. Each of them is a likely blockbuster, although the current state of the movie theater industry calls into question whether normalcy will ever return.
Assuming that people are willing to go back to movies, these MCU titles will be the ones persuading them to do so.
Marvel does have several other projects in the pipeline right now. However, none of them has a confirmed release date yet.
Loki Writer Reveals Pre-Recorded Miss Minutes Award Speech
by Matt Ramos · Published March 30, 2022
Spider-Man Swings Into Fortnite
by MarvelBlog.com · Published December 5, 2021
Chloé Zhao's Pitch Best Feige's EVER Heard
Know Your Marvel Movies: Wandavision - MarvelBlog.com
[…] from a 2021 debut and moved into 2020. And this show stars two well-established characters in the Marvel Cinematic Universe (MCU). Here's everything you need to know about […]
Chadwick Boseman Passed Away From Colon Cancer at 43 - MarvelBlog.com
[…] Black Panther 2 is currently set to release May 6, 2022, but filming hadn't begun yet, so we don't know what the studio will do just yet The family also asks for love, prayers, and respect for their privacy. […]
Next story The New Mutants Gets A New Release Date In August
Previous story RIP Martin Pasko; Worked in Comics (DC, Marvel) & TV


Bead, red Crazy Horse™ stone (coated), 14x12mm-18x14mm puffed rectangle, B- grade, Mohs hardness 3-1/2 to 4. Sold per 15" to 16" strand.
Bead, multi-agate (dyed / heated), 8x6mm-10x7mm teardrop, B- grade, Mohs hardness 6-1/2 to 7. Sold per 15" to 16" strand.
Bead, red agate / black agate / brown agate (dyed / heated), 9-10mm round, C grade, Mohs hardness 6-1/2 to 7. Sold per 15" to 16" strand.
Bead, rhodonite (natural), 20x15mm puffed rectangle, B grade, Mohs hardness 5-1/2 to 6-1/2. Sold per 15" to 16" strand.


text:
Judge tells Cambridgeshire father he should be "ashamed" after beating 11-year-old son with belt
The court heard the defendant tried to underplay what had happened – saying the belt he used was a fabric belt and not a leather belt with a buckle, as his young son had described
The court heard that the boy was left limping and with several injuries – and a further check at the hospital revealed he had a significant injury to his thigh and an injury to his neck (Image: posed by model)
A judge has told a Cambridgeshire father who beat his 11-year-old son with a belt, striking him at least 10 times, that he should be "ashamed" of his "unacceptable behaviour".
The 49-year-old man, who cannot be named for legal reasons, previously admitted assault occasioning actual bodily harm (ABH) and was sentenced at Cambridge Crown Court on Friday (June 30).
He was handed 16 months in prison after the court heard that by committing ABH, he had also breached a suspended sentence order for a previous similar offence.
Lucy Sweetland, prosecuting, said the assault took place late last year after the Cambridgeshire man's son had been disciplined at school.
She said: "The boy's teachers told his parents about that event and as soon as the defendant found out, he went to pick his son up from football practice.
Drink-driver jailed after killing 22-year-old Lauren Danks in 104 mph crash
"The boy was taken straight home, and once at home the defendant picked up a belt and began to hit his son with it.
"The child said his father was very aggressive and said he was hit around the legs while he was just wearing his thin football kit."
Ms Sweetland said the defendant then stopped hitting his son with the belt, but launched another assault after following the young boy into the kitchen where he was eating dinner.
She added: "The defendant came into the kitchen to continue the assault, hitting the boy around his head, neck and arms.
"At least 10 blows were struck with the belt and the boy's mother was screaming for the defendant to stop, which he eventually did."
The boy was left limping and with several injuries – and a further check at the hospital revealed he had a significant injury to his thigh and an injury to his neck.
Youngest victim of cyber sex offences in Cambridgeshire just five years old, figures reveal
In a police interview, the man initially denied assaulting his son, but later accepted what he had done.
The court heard that he tried to underplay what had happened – saying the belt he used was a fabric belt and not a leather belt with a buckle, as his young son had described.
Ms Sweetland said there was a "concerning pattern of domestic violence" against members of the defendant's family.
Andrew Shaw, mitigating, said the only real mitigation he could offer in the case would be the defendant's early guilty plea.
He added: "There is little else I can say in this matter, but I would urge you to keep his sentence as short as possible."
Previous convictions of men charged in connection with attack on Simon Dobbin revealed
Sentencing the Cambridgeshire man, Judge Farrell QC said it was fortunate that the defendant's son was not more seriously hurt.
He told the defendant: "You disciplined your son because he misbehaved at school, he was 11. You, quite literally, gave him a good beating.
"You hit him with a weapon, causing injuries. You should be ashamed of yourself, that type of behaviour is not acceptable.
"It's one thing for reasonable chastisement, but this was nothing of the sort and was completely unacceptable against a child.
"I understand that social services will be keeping an eye on you and monitoring the family, in particular your relationship with your child."


text:
This Just In: Harris Tweed
By Matthew Schneier
Scotland's Harris Tweed has an august history—the fabric is the only one in the world to be governed and authenticated by an Act of Parliament—but until now, the firm has never actually designed its own clothing. (After painstakingly making its tweeds by hand in the Outer Hebrides, it's left the relatively lighter lifting of design and construction to others—including Ralph Lauren, Jean Paul Gaultier, Vivienne Westwood, and the tailors of Britain's Royal Family, all of whom have used the fabric.) The company's first offering, which debuted this week, is a line of four jackets, all priced at $500. The cut's a bit roomier than some might prefer, but the tweed, as expected, is top-notch. And because the jacket's both crafted and styled to last a lifetime, you've got plenty of time to grow into it.
$500, available at harristweedscotland.com
MATTHEW SCHNEIER Photo: Corrie Vierregger


Dogs may be man's best friends, but it isn't so friendly when you're not sure what supplies are best for your dog's needs. With different sizes and styles of leashes, crates, houses, beds, collars, toys, dishes and other gear, not to mention different nutritional food formulas, grooming supplies, flea and tick treatments and more, what is right for your dog? The answer will depend on your dog's breed, age, personality and more, and it can be tricky to find just the right options for your pet.


text:
Jamila Wideman
Stanford College basketball star and WNBA player - Panelist Blurb
Jamila Wideman was born in 1975 in Denver, was raised in Laramie, Wyoming and Amherst, Massachusetts. It was around the time of her birth that she first began bouncing a basketball, and since that time the game has taken her around the world.
Jamila played on the varsity team at Amherst High for six straight years; beginning in the seventh grade; she then attended Stanford University on a full athletic scholarship from 1993-1997; leading the Stanford team as a four year starter and captain to three Final Four appearances in the NCAA tournament. After college Jamila was elected as the third overall draft pick by the Los Angeles Sparks in the inaugural WNBA draft in the summer of 1997; enjoying a four year career in the WNBA. She spent the 1999-2000 winter season in Ramle, Israel playing in the women's professional league.
While at Stanford University Jamila completed a double major, earning a B.A. in political science and African-American studies. She was also able to pursue multiple passions including basketball, writing, and her commitment to social justice, in particular to eliminating the race, gender, and economic based inequities in our criminal justice system.
Since graduating from Stanford, Jamila has established the Stanford Athletic Alliance; a one on one and group mentoring program which paired young women from East Palo with players from the Stanford Women's Basketball team.
In 1997 Jamila founded and implemented another youth program called, "Hoopin' with Jamila." This program combined basketball skills clinics with a reading and writing program targeted at young women of color incarcerated in the juvenile justice system in Los Angeles. The vision of this program was, "to arm young women with the freedom to imagine possibility and the courage to redefine themselves through self-expression." The success of the program played a large part in USA Today naming Jamila the "Most Caring Athlete" of the year in 1998.
Jamila continues to try to balance school and basketball. She currently lives in Brooklyn, New York and is in her second year of law school at New York University.
NOTE: This bio is as it appeared in The Forum program on October 18, 2001.
Being Black


text:
Q: what is the probability that insertions into a hash table will cause atleast 1 collision? Suppose we have a hash table of size $50$ which contains $30$ elements at different locations.
What is the probability that the next two insertions will cause at least one collision? (Assume a random hash function)
My approach :
Case 1 A collision during the first insertion and no collision during the second insertion:
$P(case1) = \frac{30}{50} \cdot \frac{19}{50}$
Case 2 A no collision during the first insertion and a collision during the second insertion:
$P(case2) =\frac{20}{50} \cdot \frac{31}{50}$
Case 3 Collisions during both insertions:
$P(case 3) = \frac{30}{50} \cdot \frac{31}{50}$
The above three probabilities adds to $0.848$.
What's wrong with my calculation?