text:
GridFe Hall of Fame
For lovers of the gridiron
2019 GridFe Hall of Fame Defense
Defense, Hall of Fame August 22, 2019 Bryan Frye	Leave a comment
Last year, I unveiled the GridFe Hall of Fame, a group effort of football diehards dissatisfied with (and unencumbered by the logistical limitations of) the Pro Football Hall of Fame.1 This Hall of Fame has very few rules outside of a minimum five "yea" votes out of a possible six for enshrinement. We have no waiting period for induction. If it's obvious that Tom Brady belongs, he's in; if we need to take some time to put Julio Jones's stats into perspective, we will. We don't have contribution silos. I didn't vote for John Madden solely as a coach but as a coach, influential broadcaster, and video game pioneer.
This year, as before, voting consisted of three rounds. In round one, we each named the players we believed to be slam dunks. If anyone appeared on at least five lists, he was in. In round two, we voted on all players, giving us the opportunity to give further consideration to players we did not name on our own lists. Again, anyone with at least five votes made it through. In the final round, we presented cases for those in whom we strongly believed, and we voted after arguments were given. Anyone with five votes made the cut. When the dust settled, we welcomed eight new defenders to the GridFe Hall of Fame.2
Hall of Fame Defense
Doug Atkins (1953-1969)
Chicago Bears, New Orleans Saints, Cleveland Browns
8 First Team All Pros; 2 Second Team All Pros; 8 Pro Bowls; 2 Title Wins; 2 Title Losses; 2 GridFe Deacon Awards
Standing 6'8″ and weighing as much as 275 pounds, Atkins was an imposing figure who dwarfed 1950s offensive linemen. He possessed the power you'd expect from such a behemoth, often using brute force to dominate the line of scrimmage. One of his signature moves was tossing tackles to the side with an arm swipe reminiscent of a bear batting a salmon out of the air. Legend has it that offensive linemen were afraid to hold him because they didn't want to incur his subsequent wrath. Unfortunately for offenses, Atkins wasn't just a big man; he was also a terrific athlete with rare quickness and an impressive vertical leap.3 His most famous pass rush move involved him leaping right over offensive linemen who tried to cut block him. His ability to win with power or athleticism proved to be a nightmare for quarterbacks – historian Nick Webster estimates that Atkins could have notched more than 150 sacks in his career.
Lee Roy Selmon (1976-1984)
5 First Team All Pros, 2 Second Team All Pros, 6 Pro Bowls, 1 GridFe Godzilla Award, 1 GridFe Deacon Award
Selmon began his pro career as the first ever pick and lone bright spot for the expansion Tampa Bay Buccaneers. He ultimately became the cornerstone of the franchise as the team moved to respectability. Selmon is undoubtedly on Mount Rushmore of 3-4 ends, was arguably a top three player at the position in eight of his nine pro seasons.4 A size-speed freak with exceptional athletic gifts (and intelligence to match), Selmon could play both the pass and the run with aplomb.5 While many today remember him for his elite run stuffing acumen, Selmon finished his brief career with 79 sacks. That's an average of nine per year, including a strike-shortened 1982 and a rookie year that saw him miss six games to injury. He did this despite playing in a disadvantageous situation for accruing gaudy sack numbers: for most of his tenure, he was a 3-4 end with two gap responsibility and a generally average linebacking corps behind him.6
Howie Long (1981-1993)
Oakland/Los Angeles Raiders
4 First Team All Pros, 2 Second Team All Pros, 8 Pro Bowls, 1 Title Win, 1 GridFe Godzilla Award, 2 GridFe Deacon Awards
Playing most of his prime as a 3-4 defensive end, Long joins Selmon on the position's mountaintop. Explosive and stout, vicious and intelligent, excellent against the run and the pass, able to win from the inside or the outside, he had no holes in his game. Long didn't always receive the acclaim of more heralded pass rushing ends, but the comparison isn't necessarily apt: rather than rushing from the edge, he generally played inside in passing situations, and he never sacrificed his responsibility against the run in order to chase sacks. Despite committing to his run duties, playing inside often, and absorbing consistent double teams, Long was able to accumulate 91.5 sacks. His pass rushing prowess was on full display in 1983, when he notched five sacks in a single game against the might Hogs of Washington.
Julius Peppers (2002-2018)
Carolina Panthers, Chicago Bears, Green Bay Packers
4 First Team All Pros, 2 Second Team All Pros, 9 Pro Bowls, 1 Title Loss, 1 GridFe Deacon Award
One of the greatest athletes ever to play the position (or any position, for that matter), Peppers immediately made his presence felt on the field. He used his long arms to keep blockers at bay, his power to disengage them with apparent ease, and his speed to chase down backs or passers. Criticized early on for inconsistency, much of that lends itself to the fact that Peppers almost never came off the field, which began to take its toll near the end of each season. Even at his low points, he went from otherworldly to merely good. His pass rushing prowess is well known: he currently ranks fifth all-time in sacks (and is just one away from jumping Kevin Greene) and is one of just three players with a decade's worth of double digit sacks.7 In addition to rushing the passer, Peppers was adept against the rush and possessed a sixth sense for making splash plays: he defensed 86 passes, stole eleven interceptions, forced 52 fumbles, recovered 19 fumbles, and scored two touchdowns. Tall and long with excellent leaping ability, he was great kick blocker and probably could have been a star tight end had he chosen that position instead.
Aaron Donald (2014-present)
St. Louis/Los Angeles Rams
5 First Team All Pros, 5 Pro Bowls, 1 Title Loss, 2 GridFe World Awards, 1 GridFe Godzilla Award, 4 GridFe Mean Awards
It may seem too early to name Donald to the GridFe Hall of Fame. He has played five seasons and 78 regular season games in his career. But consider this: as an interior pass rusher, he has averaged twelve sacks per season (including breaking the single season record for defensive tackles), he's one of eight players to win multiple defensive player of the year honors from the Associated Press,8, he has earned a Pro Bowl selection and first team all pro nod every season of his brief career, and his 78 games are as many as fourteen players already in the Pro Football Hall of Fame.9 Most legendary defensive tackles take their places in history based on a handful of great years surrounded by some good years. Donald has already produced as many dominant seasons as any non-Rushmore defensive tackle, and his peak play is arguably greater than that of anyone ever to play the position. He doesn't need to hang around for a few more years to cement his place in the Pantheon of defenders; he's already there. In addition to challenging Alan Page as the top pass rushing defensive tackle in history, Donald is also among the best run-defending defensive linemen of his era, stuffing runners at or behind the line of scrimmage at an unprecedented rate. Regardless of what he is called to do, he can do it better than nearly anyone. On the short side, but with an incredibly muscular build, Donald can out-leverage any lineman one on one and routinely beats double teams. He possesses the quickness of an edge rusher and has an arsenal of hand moves that consistently frustrate centers and guards. Perhaps his greatest gift is his ability to sense how a play is going to develop and how offensive lines are going to block him, enabling him to act rather than react to opponents.
Willie Lanier (1967-1977)
8 First Team All Pros (2 AFL/6 NFL), 8 Pro Bowls (2 AFL/6 NFL), 1 Title Win, 4 GridFe Enforcer Awards (2 AFL/2 NFL)
Known as Contact for his punishing tackling style that jarred ball carriers, Lanier was also a sure tackler whom Dr. Z once referred to as a run stuffer supreme (remember, he played in an era when stuffing runs still mattered). As good as he was against the run, he was arguably even better in coverage. Interceptions are rarely a great stat to point to as proof of such ability, but Lanier's 27 career picks are a tangible evidence of his work as a cover man. Film shows a player with great quickness and instincts, able to operate well in space and anticipate where the quarterback wanted to throw. Lanier came into the league facing similar racial prejudices that kept African Americans from landing roles as starting quarterbacks.10 Fortunately, the AFL realized what he could do on the field and gave him the opportunity to prove traditionalists wrong. He didn't take long, earning postseason honors his second year as a pro and every year after till he turned 30.11 Lanier was a trailblazer whose performance on a championship defense paved the way for future generations of black players to patrol the middle of the defense.
Randy Gradishar (1974-1983)
6 First Team All Pros, 2 Second Team All Pros, 7 Pro Bowls, 1 Title Loss, 2 GridFe Enforcer Awards
Readers should not lose sight of the fact that the GridFe Hall of Fame was created because the decisions of the traditional Hall of Fame did not perfectly align with the values of a handful of disgruntled fans. "Enshrine Randy Gradishar" was practically this deliberative body's mission statement. Gradishar's traditional supporters point to his tackle stats– he reportedly retired with the career record and averaged a cartoonish 226 tackles per 16 games. Gradishar's traditional detractors scream that those stats are inflated.12 By making Gradishar's case about tackles, his candidacy has turned into a proxy war for the reliability of Denver's home-town stat-keepers rather than a referendum on Gradishar himself. Since the only winning move is not to play, we will not discuss his tackle stats any further.
Gradishar was one of the best linebackers in college history. He was drafted by a team with no history of success and played ten years without missing a game. He was universally hailed as the best player on a famous defense littered with stars, and when he retired his nine seasons as a starter included the seven best defenses in Denver history13 as measured by SRS. He made seven pro bowls, was named first-team All Pro by a major publication in six different seasons, and was the 1978 AP Defensive Player of the Year. Famous for his instincts, as sure of a tackler as the league has ever seen, devastating in short yardage, but also among history's most skilled at dropping back into coverage, Gradishar was an all-around star. He possessed incredible range before incredible range was a flashy thing for a linebacker to possess.14 He didn't have a reputation for ferocious hits, but when Walter Payton was asked about the hardest hit of his NFL career, he responded with "Randy Gradishar, 1978."
Von Miller (2011-present)
7 First Team All Pros, 7 Pro Bowls, 1 Title Win, 1 GridFe Godzilla Award, 5 GridFe Dobre Shunka Awards
Perhaps it feels premature to place Miller alongside the pass-rushing legends of yore at this juncture. We must confess that there were those among us who initially felt the same about a man who has not yet played a snap of football after his thirtieth birthday. But upon examination Miller's body of work already holds up against even the all-time greats. He has played ten games or more just seven times but already has as many seasons with double-digit sacks as Lawrence Taylor or Derrick Thomas.15 Among players who were primarily considered linebackers through their career, only former teammate DeMarcus Ware (8) has more.16
Officially, only Ware and Jared Allen had more career sacks before their thirtieth birthday.17 Miller has made the pro bowl and been named a 1st-team All Pro by at least one major publication for every healthy year of his career and was named Super Bowl MVP after he (and Ware) dominated the 2015 postseason.18 Seemingly the most naturally gifted pass-rusher the league has ever seen, many players are known for one or two dominant moves but in Miller's arsenal are a genuinely unprecedented number of top-level moves, countermoves, and counter-countermoves, supplemented by one of the quickest first steps in league history. While many of his fellow pocket-disruptors treat the running game as someone else's concern, Miller draws praise for his run support and even for his ability to hold up in coverage on the rare occasions the Broncos have asked him to drop away from the line of scrimmage.
The GrideFe Hall of Fame Committee comprises research guru Topher Doll, standard human Bryan Frye, actual genius Adam Harstad, enigmatic fount of knowledge Raider Joe, potentate of prognostication Thomas McDermott, and quarterback aficionado Adam Steele. ↩
Others receiving votes: Andy Robustelli, John Randle*, Arnie Weinmeister*, Art Donovan, Henry Jordan, Brian Urlacher, Zach Thomas, Mel Renfro*, George Allen ↩
At his size, he won the Southeastern Conference high jump title as a collegian. He also used his combination of height and jumping skill to be one of the better kick blockers in history. ↩
The NFLPA named his the NFC's best defensive lineman four times. That's half of his healthy seasons. ↩
He was also a superb kick blocker. ↩
This is after a rookie year that saw him play inside often in Tampa's failed experiment with the 4-3 defense. ↩
He has exactly ten. Bruce Smith had thirteen, and Reggie White had twelve in the NFL and at least one in the USFL. ↩
Others include Joe Greene (the only other DT), Mike Singletary, Lawrence Taylor (3), Reggie White, Bruce Smith, Ray Lewis, and J.J. Watt (3). They are all inaugural members of the GridFe Hall of Fame. ↩
Joe Guyon (46), Fritz Pollard (49), Jim Thorpe (52), Ernie Nevers (54), Cliff Battles (60), Doak Walker (67), Ace Parker and Gale Sayers (68), Arnie Weinmeister (71), Dick Stanfel (73), Dutch Clark and George McAfee (75), Wayne Millner (76), and Terrell Davis (78). A full season next year will see him catch an additional fifteen players. ↩
It was a widespread belief at the time that white players were the only ones capable of handling the mental burden of playing quarterback, middle linebacker, and center. Even after other positions were integrated, those positions belonged to the good ol' boys club. ↩
This isn't just one of those media creations, where a player is recognized for his uniqueness rather than his greatness; the NFL Players Association named him the AFC's best linebacker every year from 1970-74. ↩
They certainly are, though probably not as much as the detractors would have you believe. ↩
And eight of the top ten. ↩
Joel Buchsbaum of Pro Football Weekly wrote "there are quite a few scouts who will tell you that former Broncos ILB Randy Gradishar was almost as good, even as good, as Jack Lambert." ↩
7 apiece. ↩
Though it should be noted that positional designations for edge rushers are often fluid. ↩
Lawrence Taylor also passes him by half a sack if we for a minute stop pretending that pass-rushing was invented in 1982. Also, with an unofficial 106 sacks through 1968, Deacon Jones sits atop the list. Of course, Reggie White had 118.5 sacks before turning 30 if you include the 23.5 he recorded in the USFL. ↩
Just the ninth time a defender has been so honored. ↩
Previous Post2019 PredictionsNext Post2019 GridFe Hall of Fame Offense
2019 GridFe Hall of Fame Offense
Mount Rushmore of Cornerbacks by Raiderjoe
Mount Rushmore of Centers by Raiderjoe
Can NFL Refs Do What Analysts Never Could: Get Coaches To Pass More? – Vote Fidler For School Board on Why do NFL teams run so often? (no, seriously: why?)
חשוב, אבל פחות – 11 פרסונל – בעיקר בלוג פוטבול on Why do NFL teams run so often? (no, seriously: why?)
Counterpoint: All-Time 53-Man Roster - The GridFe on All Time 53 Man NFL Roster
Counterpoint: All-Time 53-Man Roster - The GridFe on A Brief Essay on the Legendary Marcus Allen
Weekly Sports Analytics News Roundup - May 28th, 2019 - StatSheetStuffer on The Surprising Utility of QB Touchdown Stats
Data Dump
Team Strength
Weekly Predictions
Follow @LaverneusDingle


Genes are units of genetic information, stored in each cell of every living being. They determine if you have blue or brown eyes, are tall or short and, sometimes, if you're likely to develop a disease due to a mutation in a gene inherited from one or both of your parents. Cystic fibrosis and muscular dystrophy are examples of serious diseases known to be inherited.
But it turns out that some assumptions about the genetic risks of many other serious and far more common diseases that run in families were wrong. And a study conducted by scientists at the University of Edinburgh's Roslin Institute and MRC Human Genetics Unit could help relieve the worries of countless people who feel doomed they'll develop depression, heart disease, or high blood pressure eventually because so many of their relatives have suffered from these health problems.
The researchers examined medical information collected from half a million people via the UK Biobank, an international project helping scientists search for the causes of cancer, heart disease, stroke, diabetes, arthritis, osteoporosis, eye disorders, depression, and dementia. The UK Biobank is a repository of blood, urine, and saliva samples collected from volunteers who also have provided information about themselves and agreed to have their health followed.
In addition to studying information compiled on the UK Biobank research subjects, the University of Edinburgh team also studied the family medical histories of the volunteers' adoptive and blood relatives. In all, the scientists investigated records on 1,555,906 United Kingdom (UK) residents to document the risk of inheriting common diseases that tend to occur in families across the UK, including high blood pressure, heart disease, and several neurological diseases.
"The huge UK Biobank study allowed us to obtain very precise estimates of the role of genetics in these important diseases," said lead researcher Chris Hayley, PhD, of the University of Edinburgh's Roslin Institute and MRC Human Genetics Unit.
Although previous studies have identified genes linked with susceptibility to certain medical conditions, genetic factors only account for part of a person's likelihood of developing a disease. The Scottish researchers concluded what's known as the "heritability" of many diseases passed down through genes has been overestimated by about 50 percent, and the actual cause of health problems that pop up repeatedly in families is often due to personal choices and how people live. These findings should help doctors and patients have a more realistic understanding of the value of genetic testing for identifying people at risk of diseases, they noted.
Hayley and colleagues found high blood pressure, depression, and heart disease that run in families were primarily linked to relatives sharing the same lifestyles, diets, and living environments — and not caused by inherited genes. However, the family environment and lifestyle appear to play a more limited, or none of importance, in Parkinson's disease and dementia.
The results of the study underline the need to identify and modify environmental and lifestyle factors that contribute to the development of specific diseases, the researchers concluded.
The National Institutes of Health (NIH) agrees genes should not be over-emphasized as the cause of diseases that run in families, because lifestyle habits and environment can play a major part in raising or lowering your risk for so many of these health problems. Diet, weight, physical activity, tobacco and alcohol use, occupation, and where you live can all increase or decrease the odds you will develop a specific disease, according to the NIH.
In fact, if your family has a health history of certain medical problems, you may have the most to gain from adopting a healthier lifestyle to reduce your risk for diseases that run in your family, the Centers for Disease Control and Prevention (CDC) notes. Screening tests, such as blood glucose tests for diabetes, mammograms, and colonoscopies when indicated, can find early signs of many diseases and, along with a healthy lifestyle, help you avoid many health problems that other family members have experienced. For more information, visit the CDC's Family History and Chronic Disease page.


text:
static CGFloat const kLGFilterViewInnerMarginW = 10.f;
static CGFloat const kLGFilterViewInnerMarginH = 5.f;

@interface LGFilterView () <UITableViewDataSource, UITableViewDelegate, UIGestureRecognizerDelegate>

@property (assign, nonatomic, getter=isObserversAdded) BOOL observersAdded;

@property (assign, nonatomic) UIView *parentView;
@property (strong, nonatomic) UIView *backgroundView;

@property (strong, nonatomic) UITableView  *tableView;
@property (strong, nonatomic) UIScrollView *scrollView;

@property (strong, nonatomic) NSArray *titles;
@property (strong, nonatomic) UIView  *innerView;

@property (strong, nonatomic) UIColor *backgroundColorNormal;

@end

@implementation LGFilterView

- (instancetype)initWithView:(UIView *)view
{
    self = [super init];
    if (self)
    {
        if ([view isKindOfClass:[UIScrollView class]])
            NSLog(@"LGFilterView: WARNING !!! view can not be subclass of UIScrollView !!!");

        // -----

        _innerView = view;

        [self setupDefaults];
    }
    return self;
}

- (instancetype)initWithTitles:(NSArray *)titles
{
    self = [super init];
    if (self)
    {
        _titles = titles;

        [self setupDefaults];
    }
    return self;
}

+ (instancetype)filterViewWithView:(UIView *)view
{
    return [[self alloc] initWithView:view];
}

+ (instancetype)filterViewWithTitles:(NSArray *)titles
{
    return [[self alloc] initWithTitles:titles];
}

#pragma mark -

- (instancetype)initWithView:(UIView *)view
               cancelHandler:(void(^)(LGFilterView *filterView))cancelHandler
{
    self = [self initWithView:view];
    if (self)
    {
        _cancelHandler = cancelHandler;
    }
    return self;
}

- (instancetype)initWithTitles:(NSArray *)titles
                 actionHandler:(void(^)(LGFilterView *filterView, NSString *title, NSUInteger index))actionHandler
                 cancelHandler:(void(^)(LGFilterView *filterView))cancelHandler
{
    self = [self initWithTitles:titles];
    if (self)
    {
        _actionHandler = actionHandler;
        _cancelHandler = cancelHandler;
    }
    return self;
}

+ (instancetype)filterViewWithView:(UIView *)view
                     cancelHandler:(void(^)(LGFilterView *filterView))cancelHandler
{
    return [[self alloc] initWithView:view
                        cancelHandler:cancelHandler];
}

+ (instancetype)filterViewWithTitles:(NSArray *)titles
                       actionHandler:(void(^)(LGFilterView *filterView, NSString *title, NSUInteger index))actionHandler
                       cancelHandler:(void(^)(LGFilterView *filterView))cancelHandler
{
    return [[self alloc] initWithTitles:titles
                          actionHandler:actionHandler
                          cancelHandler:cancelHandler];
}

#pragma mark -

- (instancetype)initWithView:(UIView *)view
                    delegate:(id<LGFilterViewDelegate>)delegate
{
    self = [self initWithView:view];
    if (self)
    {
        _delegate = delegate;
    }
    return self;
}

- (instancetype)initWithTitles:(NSArray *)titles
                      delegate:(id<LGFilterViewDelegate>)delegate
{
    self = [self initWithTitles:titles];
    if (self)
    {
        _delegate = delegate;
    }
    return self;
}

+ (instancetype)filterViewWithView:(UIView *)view
                          delegate:(id<LGFilterViewDelegate>)delegate
{
    return [[self alloc] initWithView:view
                             delegate:delegate];
}

+ (instancetype)filterViewWithTitles:(NSArray *)titles
                            delegate:(id<LGFilterViewDelegate>)delegate
{
    return [[self alloc] initWithTitles:titles
                               delegate:delegate];
}

- (void)setupDefaults
{
    _transitionStyle = (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone ? LGFilterViewTransitionStyleTop : LGFilterViewTransitionStyleCenter);

    _selectedIndex = -1;

    _separatorsVisible = YES;
    _separatorsColor = [UIColor colorWithRed:0.85 green:0.85 blue:0.85 alpha:1.f];
    _separatorsEdgeInsets = UIEdgeInsetsMake(0.f, 10.f, 0.f, 10.f);

    _titleColor = [UIColor colorWithRed:0.f green:0.5 blue:1.f alpha:1.f];
    _titleColorHighlighted = [UIColor colorWithRed:0.f green:0.5 blue:1.f alpha:1.f];
    _titleColorSelected = [UIColor whiteColor];

    self.backgroundColor = [UIColor whiteColor];
    _backgroundColorHighlighted = [UIColor colorWithRed:0.9 green:0.9 blue:0.9 alpha:1.f];
    _backgroundColorSelected = [UIColor colorWithRed:0.f green:0.5 blue:1.f alpha:1.f];

    _font = [UIFont systemFontOfSize:20.f];
    _numberOfLines = 1;
    _lineBreakMode = NSLineBreakByTruncatingMiddle;
    _textAlignment = NSTextAlignmentCenter;
    _adjustsFontSizeToFitWidth = YES;
    _minimumScaleFactor = 14.f/20.f;

    _cornerRadius = 5.f;
    _borderColor = nil;
    _borderWidth = 0.f;

    _indicatorStyle = UIScrollViewIndicatorStyleBlack;

    // -----

    _backgroundView = [UIView new];
    _backgroundView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5];
    _backgroundView.alpha = 0.f;
    [self addSubview:_backgroundView];

    // -----

    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(cancelAction)];
    tapGesture.delegate = self;
    [_backgroundView addGestureRecognizer:tapGesture];
}

#pragma mark - Dealloc

- (void)dealloc
{
#if DEBUG
    NSLog(@"%s [Line %d]", __PRETTY_FUNCTION__, __LINE__);
#endif
}

#pragma mark -

- (void)willMoveToSuperview:(UIView *)newSuperview
{
    [super willMoveToSuperview:newSuperview];

    if (!newSuperview)
        [self removeObservers];
    else
        [self addObservers];
}

#pragma mark - Setters and Getters

- (void)setBackgroundColor:(UIColor *)backgroundColor
{
    [super setBackgroundColor:[UIColor clearColor]];

    _backgroundColorNormal = backgroundColor;

    if (_tableView)
        _tableView.backgroundColor = backgroundColor;
    else if (_scrollView)
        _scrollView.backgroundColor = backgroundColor;
}

- (void)setContentInset:(UIEdgeInsets)contentInset
{
    if (!UIEdgeInsetsEqualToEdgeInsets(_contentInset, contentInset))
    {
        _contentInset = contentInset;

        [self layoutInvalidate];
    }
}

- (void)setOffset:(CGPoint)offset
{
    if (!CGPointEqualToPoint(_offset, offset))
    {
        _offset = offset;

        [self layoutInvalidate];
    }
}

#pragma mark -

- (void)showInView:(UIView *)view
          animated:(BOOL)animated
 completionHandler:(void(^)())completionHandler;
{
    if (self.isShowing) return;

    _parentView = view;

    [self subviewsInvalidate];
    [self layoutInvalidate];

    _showing = YES;

    // -----

    [[NSNotificationCenter defaultCenter] postNotificationName:kLGFilterViewWillShowNotification object:self userInfo:nil];

    if (_willShowHandler) _willShowHandler(self);

    if (_delegate && [_delegate respondsToSelector:@selector(filterViewWillShow:)])
        [_delegate filterViewWillShow:self];

    // -----

    if (animated)
    {
        [self getParametersFromPresentation];

        [LGFilterView animateStandardWithAnimations:^(void)
         {
             [self showAnimations];
         }
                                         completion:^(BOOL finished)
         {
             if (finished)
             {
                 [self showComplete];

                 if (completionHandler) completionHandler();
             }
         }];

    }
    else
    {
        [self showAnimations];

        [self showComplete];

        if (completionHandler) completionHandler();
    }
}

- (void)showAnimations
{
    UIScrollView *scrollView = nil;

    if (_tableView)
        scrollView = _tableView;
    else if (_scrollView)
        scrollView = _scrollView;

    // -----

    _backgroundView.alpha = 1.f;

    if (_transitionStyle == LGFilterViewTransitionStyleCenter)
    {
        scrollView.transform = CGAffineTransformIdentity;
        scrollView.alpha = 1.f;
    }
    else scrollView.center = CGPointMake(scrollView.center.x, scrollView.frame.size.height/2);
}

- (void)showComplete
{
    [[NSNotificationCenter defaultCenter] postNotificationName:kLGFilterViewDidShowNotification object:self userInfo:nil];

    if (_didShowHandler) _didShowHandler(self);

    if (_delegate && [_delegate respondsToSelector:@selector(filterViewDidShow:)])
        [_delegate filterViewDidShow:self];
}

#pragma mark -

- (void)dismissAnimated:(BOOL)animated
      completionHandler:(void(^)())completionHandler
{
    if (!self.isShowing) return;

    _showing = NO;

    [[NSNotificationCenter defaultCenter] postNotificationName:kLGFilterViewWillDismissNotification object:self userInfo:nil];

    if (_willDismissHandler) _willDismissHandler(self);

    if (_delegate && [_delegate respondsToSelector:@selector(filterViewWillDismiss:)])
        [_delegate filterViewWillDismiss:self];

    // -----

    if (animated)
    {
        [self getParametersFromPresentation];

        [LGFilterView animateStandardWithAnimations:^(void)
         {
             [self dismissAnimations];
         }
                                         completion:^(BOOL finished)
         {
             if (finished)
             {
                 [self dismissComplete];

                 if (completionHandler) completionHandler();
             }
         }];
    }
    else
    {
        [self dismissAnimations];

        [self dismissComplete];

        if (completionHandler) completionHandler();
    }
}

- (void)dismissAnimations
{
    UIScrollView *scrollView = nil;

    if (_tableView)
        scrollView = _tableView;
    else if (_scrollView)
        scrollView = _scrollView;

    // -----

    _backgroundView.alpha = 0.f;

    if (_transitionStyle == LGFilterViewTransitionStyleCenter)
    {
        scrollView.transform = CGAffineTransformMakeScale(0.9, 0.9);
        scrollView.alpha = 0.f;
    }
    else scrollView.center = CGPointMake(scrollView.center.x, -scrollView.frame.size.height/2);
}

- (void)dismissComplete
{
    [self removeFromSuperview];

    // -----

    [[NSNotificationCenter defaultCenter] postNotificationName:kLGFilterViewDidDismissNotification object:self userInfo:nil];

    if (_didDismissHandler) _didDismissHandler(self);

    if (_delegate && [_delegate respondsToSelector:@selector(filterViewDidDismiss:)])
        [_delegate filterViewDidDismiss:self];
}

#pragma mark - Table View Data Source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return _titles.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    LGFilterViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];

    cell.title                      = _titles[indexPath.row];
    cell.titleColor                 = _titleColor;
    cell.titleColorHighlighted      = _titleColorHighlighted;
    cell.titleColorSelected         = _titleColorSelected;
    cell.backgroundColorHighlighted = _backgroundColorHighlighted;
    cell.backgroundColorSelected    = _backgroundColorSelected;
    cell.separatorVisible           = (self.isSeparatorsVisible && indexPath.row != _titles.count-1);
    cell.separatorColor             = _separatorsColor;
    cell.separatorEdgeInsets        = _separatorsEdgeInsets;
    cell.textAlignment              = _textAlignment;
    cell.font                       = _font;
    cell.numberOfLines              = _numberOfLines;
    cell.lineBreakMode              = _lineBreakMode;
    cell.adjustsFontSizeToFitWidth  = _adjustsFontSizeToFitWidth;
    cell.minimumScaleFactor         = _minimumScaleFactor;

    return cell;
}

#pragma mark - Table View Delegate

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (_numberOfLines == 0)
    {
        NSString *title = _titles[indexPath.row];

        UILabel *label = [UILabel new];
        label.text                      = title;
        label.textAlignment             = _textAlignment;
        label.font                      = _font;
        label.numberOfLines             = _numberOfLines;
        label.lineBreakMode             = _lineBreakMode;
        label.adjustsFontSizeToFitWidth = _adjustsFontSizeToFitWidth;
        label.minimumScaleFactor        = _minimumScaleFactor;

        CGSize size = [label sizeThatFits:CGSizeMake(tableView.frame.size.width-kLGFilterViewInnerMarginW*2, CGFLOAT_MAX)];

        size.height += kLGFilterViewInnerMarginH*2;

        if (size.height < 44.f)
            size.height = 44.f;

        return size.height;
    }
    else return 44.f;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.row == _selectedIndex)
    {
        [self cancelAction];
    }
    else
    {
        [self dismissAnimated:YES completionHandler:nil];

        _selectedIndex = indexPath.row;

        NSString *title = _titles[indexPath.row];
        NSUInteger index = indexPath.row;

        if (_actionHandler) _actionHandler(self, title, index);

        if (_delegate && [_delegate respondsToSelector:@selector(filterView:buttonPressedWithTitle:index:)])
            [_delegate filterView:self buttonPressedWithTitle:title index:index];
    }
}

#pragma mark -

- (void)subviewsInvalidate
{
    if (_titles.count)
    {
        if (!_tableView)
        {
            _tableView = [UITableView new];
            _tableView.dataSource = self;
            _tableView.delegate = self;
            _tableView.alwaysBounceVertical = NO;
            _tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
            [_tableView registerClass:[LGFilterViewCell class] forCellReuseIdentifier:@"cell"];
            [self addSubview:_tableView];
        }

        _tableView.backgroundColor = _backgroundColorNormal;
        _tableView.indicatorStyle = _indicatorStyle;

        if (_transitionStyle == LGFilterViewTransitionStyleCenter)
        {
            _tableView.layer.masksToBounds = YES;
            _tableView.layer.cornerRadius = _cornerRadius;
            _tableView.layer.borderColor = _borderColor.CGColor;
            _tableView.layer.borderWidth = _borderWidth;
        }

        [_tableView reloadData];
    }
    else if (_innerView)
    {
        if (!_scrollView)
        {
            _scrollView = [UIScrollView new];
            _scrollView.alwaysBounceVertical = NO;
            [_scrollView addSubview:_innerView];
            [self addSubview:_scrollView];
        }

        _scrollView.backgroundColor = _backgroundColorNormal;
        _scrollView.indicatorStyle = _indicatorStyle;

        if (_transitionStyle == LGFilterViewTransitionStyleCenter)
        {
            _scrollView.layer.masksToBounds = YES;
            _scrollView.layer.cornerRadius = _cornerRadius;
            _scrollView.layer.borderColor = _borderColor.CGColor;
            _scrollView.layer.borderWidth = _borderWidth;
        }
    }

    if (!self.superview)
        [_parentView addSubview:self];
}

- (void)layoutInvalidate
{
    self.frame = CGRectMake(0.f, 0.f, _parentView.frame.size.width, _parentView.frame.size.height);
    _backgroundView.frame = CGRectMake(0.f, 0.f, self.frame.size.width, self.frame.size.height);

    // -----

    UIScrollView *scrollView = nil;

    if (_tableView)
        scrollView = _tableView;
    else if (_scrollView)
        scrollView = _scrollView;

    scrollView.contentInset = _contentInset;
    scrollView.scrollIndicatorInsets = _contentInset;

    if (_transitionStyle == LGFilterViewTransitionStyleCenter)
    {
        scrollView.transform = CGAffineTransformIdentity;
        scrollView.alpha = 1.f;
    }

    // -----

    CGFloat scrollViewHeight = _contentInset.top+_contentInset.bottom;

    if (_tableView)
        scrollViewHeight += _tableView.contentSize.height;
    else if (_scrollView)
        scrollViewHeight += _innerView.frame.size.height;

    if (_parentView.frame.size.height < scrollViewHeight)
        scrollViewHeight = _parentView.frame.size.height;

    if (_heightMax)
    {
        if (_heightMax < scrollViewHeight)
            scrollViewHeight = _heightMax;
    }
    else
    {
        if (_parentView.frame.size.height*0.5 < scrollViewHeight)
            scrollViewHeight = _parentView.frame.size.height*0.5;
    }

    // -----

    CGRect scrollViewFrame = CGRectZero;

    if (_transitionStyle == LGFilterViewTransitionStyleCenter)
        scrollViewFrame = CGRectMake(_parentView.frame.size.width/2-kLGFilterViewWidth/2,
                                     _parentView.frame.size.height/2-scrollViewHeight/2+_offset.y,
                                     kLGFilterViewWidth,
                                     scrollViewHeight);
    else
        scrollViewFrame = CGRectMake(0.f, 0.f, self.frame.size.width, scrollViewHeight);

    if ([UIScreen mainScreen].scale == 1.f)
        scrollViewFrame = CGRectIntegral(scrollViewFrame);

    // -----

    if (!self.isShowing && _transitionStyle == LGFilterViewTransitionStyleTop)
        scrollViewFrame.origin.y -= scrollViewFrame.size.height;

    scrollView.frame = scrollViewFrame;

    // -----

    if (_tableView)
    {
        if (_selectedIndex >= 0)
        {
            if (_transitionStyle == LGFilterViewTransitionStyleCenter)
                [_tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:_selectedIndex inSection:0] animated:NO scrollPosition:UITableViewScrollPositionMiddle];
            else
            {
                [_tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:_selectedIndex inSection:0] animated:NO scrollPosition:UITableViewScrollPositionNone];

                CGRect rect = [_tableView rectForRowAtIndexPath:[NSIndexPath indexPathForRow:_selectedIndex inSection:0]];

                CGFloat offsetY = rect.origin.y+rect.size.height/2-_tableView.frame.size.height/2-_tableView.contentInset.top/2;
                if (offsetY < -_tableView.contentInset.top)
                    offsetY = -_tableView.contentInset.top;
                else if (offsetY > _tableView.contentSize.height-_tableView.frame.size.height)
                    offsetY = _tableView.contentSize.height-_tableView.frame.size.height;

                _tableView.contentOffset = CGPointMake(_tableView.contentOffset.x, offsetY);
            }
        }
        else _tableView.contentOffset = CGPointMake(_tableView.contentOffset.x, -_tableView.contentInset.top);
    }
    else if (_scrollView)
    {
        _scrollView.contentSize = CGSizeMake(_scrollView.frame.size.width, _innerView.frame.size.height);

        // -----

        CGRect viewFrame = CGRectMake(_scrollView.frame.size.width/2-_innerView.frame.size.width/2, 0.f, _innerView.frame.size.width, _innerView.frame.size.height);

        if ([UIScreen mainScreen].scale == 1.f)
            viewFrame = CGRectIntegral(viewFrame);

        _innerView.frame = viewFrame;
    }

    if (!self.isShowing && _transitionStyle == LGFilterViewTransitionStyleCenter)
    {
        scrollView.transform = CGAffineTransformMakeScale(1.2, 1.2);
        scrollView.alpha = 0.f;
    }
}

- (void)getParametersFromPresentation
{
    UIScrollView *scrollView = nil;

    if (_tableView)
        scrollView = _tableView;
    else if (_scrollView)
        scrollView = _scrollView;

    // -----

    if (_backgroundView.layer.animationKeys.count && scrollView.layer.animationKeys.count)
    {
        _backgroundView.alpha = [(CALayer *)_backgroundView.layer.presentationLayer opacity];

        if (_transitionStyle == LGFilterViewTransitionStyleCenter)
        {
            CGFloat scaleX = [[(CALayer *)scrollView.layer.presentationLayer valueForKeyPath:@"transform.scale.x"] floatValue];
            CGFloat scaleY = [[(CALayer *)scrollView.layer.presentationLayer valueForKeyPath:@"transform.scale.y"] floatValue];

            if (scaleX && scaleY)
                scrollView.transform = CGAffineTransformMakeScale(scaleX, scaleY);

            scrollView.alpha = [(CALayer *)scrollView.layer.presentationLayer opacity];
        }
        else scrollView.center = [(CALayer *)scrollView.layer.presentationLayer position];

        [_backgroundView.layer removeAllAnimations];
        [scrollView.layer removeAllAnimations];
    }
}

#pragma mark -

- (void)cancelAction
{
    [self dismissAnimated:YES completionHandler:nil];

    // -----

    if (_cancelHandler) _cancelHandler(self);

    if (_delegate && [_delegate respondsToSelector:@selector(filterViewCancelled:)])
        [_delegate filterViewCancelled:self];
}

#pragma mark - Observers

- (void)addObservers
{
    if (!self.isObserversAdded && _parentView)
    {
        _observersAdded = YES;

        [_parentView addObserver:self forKeyPath:@"frame" options:NSKeyValueObservingOptionNew context:nil];
    }
}

- (void)removeObservers
{
    if (self.isObserversAdded && _parentView)
    {
        _observersAdded = NO;

        [_parentView removeObserver:self forKeyPath:@"frame"];
    }
}

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    if ([keyPath isEqualToString:@"frame"])
        [self layoutInvalidate];
    else
        [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}

#pragma mark - Support

+ (void)animateStandardWithAnimations:(void(^)())animations completion:(void(^)(BOOL finished))completion
{
    if ([UIDevice currentDevice].systemVersion.floatValue >= 7.0)
    {
        [UIView animateWithDuration:0.5
                              delay:0.0
             usingSpringWithDamping:1.f
              initialSpringVelocity:0.5
                            options:0
                         animations:animations
                         completion:completion];
    }
    else
    {
        [UIView animateWithDuration:0.5*0.66
                              delay:0.0
                            options:UIViewAnimationOptionCurveEaseInOut
                         animations:animations
                         completion:completion];
    }
}

@end

redpajama_set_name: RedPajamaGithub


Stamford Talk: Eat, Think, Drive, Blog!: New Blog: Talk About Norwalk!
I am so happy to introduce you to a new blog about... NORWALK! Talk About Norwalk is written by a former coworker of mine who grew up in Norwalk and currently lives there with her family. Suzanna's posts so far are the perfect balance of interesting (busting on a restaurant!) and informative (recommendation for where to take stir-crazy kids). Please check it out and pass the link on to any one you know you lives in Norwalk. I am confident that Talk About Norwalk is going to be THE blog about Norwalk.
You can also follow Suzanna on twitter at @talknorwalk. And follow me as @stamfordtalk!


Cheap Used 2004 HYUNDAI GETZ GL TB 5D HATCHBACK for sale in Adelaide | Used 2004 HYUNDAI GETZ's in Adelaide at wholesale prices!
Not the HYUNDAI GETZ you were looking for? Get in touch with us today and we will help you find the perfect car for your needs!


I recently read an enlightening study by Development Dimensions International (DDI) — "Holding Women Back: Troubling Discoveries and Best Practices for Helping Female Leaders Succeed" — which reveals that, worldwide, women are simply not getting the same career opportunities as men. The study is based on responses from 12,800 leaders in 76 countries and approximately 1,500 organizations. However, the study also offers advice on how to overcome such challenges.
We learn that, in addition to earning lower salaries than men, women are often overlooked when employers single out "high potentials" — employees who have strong leadership potential. High-potential employees are placed in accelerated development programs to foster their leadership skills. The DDI study reveals that the gap between men and women in high-potential programs widens as management levels increase: "there were 28 percent more men than women in high-potential programs at the first level of management and 50 percent more men than women in such programs at the executive level." As a result, fewer women than men reach senior leadership positions.
The study provides seven tips for organizations and five tips for women to help female leaders succeed. For instance, the study recommends that organizations implement a formal succession plan to ensure that objective standards are followed when choosing replacements for key leadership roles. When an organization in the U.S. health care industry, for example, had a formal succession plan in place, "nearly two-thirds (63 percent) of the executives were women." However, without a succession plan, only "one-third (36 percent)" of the executives were women.
I encourage you to read "Holding Women Back: Troubling Discoveries and Best Practices for Helping Female Leaders Succeed" and then let us know your thoughts about it. Has your firm or company provided you with leadership training and opportunities?


Home :: Port Authority® - Weather Worn Sport Shirt. K418.
Port Authority® - Weather Worn Sport Shirt. K418.
You can't beat the unique look and character of pigment-dye for lived-in appeal. Until now. Made with a proprietary process, our new Weather Worn Sport Shirt is our softest pigment-dyed* shirt ever!
It has the unbeatable look of pigment-dye but, like your favorite jeans, it's been broken in for incredible softness. The mellow attitude just gets better with every trip through the washer and dryer.
*Please note that special considerations must be taken when printing white ink on pigment-dyed garments.
*The pigment-dying process infuses each garment with unique character. Please allow for slight color variations in production and washing.


System makes modifications essential to transplant code from one program into one other. Nothing's worse than exhibiting up with a PowerPoint presentation and never having the suitable HDMI cable. What if you happen to may venture the presentation instantly from your smartphone onto the wall? Numerous institutions, from MIT to Carnegie Mellon are engaged on simplified projection technology. The Omnitouch , for example, is a wearable gadget that permits you to venture a excessive-res contact-display display on any floor, even the palm of your hand. This could assist facilitate more impromptu meetings and collaboration, and allow a busy entrepreneur to journey frivolously while making presentations and pitches in different areas.


text:
Q: Generate a method returning a non-nullable simple type (int instead of int?) I'm using Swagger-Codegen v2.0 to automatically generate an SDK based on my API, which is defined using Swagger.
My problem is: I have an operation which returns an integer, the generated method in the SDK returns a nullable integer. In the API description, it is well specified that this operations returns a 32 bits integer. I tried several modifications such as adding a default value of 0 in an operation filter but without successs.
Here is the operation json description:
"operationId": "GetSomething",
    "consumes": [],
    "produces": [
      "text/plain",
      "application/json",
      "text/json"
    ],
    "responses": {
      "200": {
        "description": "Success",
        "schema": {
          "format": "int32",
          "default": 0,
          ],
          "type": "integer"
        }
      }

And here is the generated method prototype:
int? GetSomething();

Any insight would be welcome

redpajama_set_name: RedPajamaStackExchange