text:
#2272 – 1987 22c Special Occasions: Happy Birthday!
1987 22¢ Happy Birthday
Special OccasionsBooklet Stamps
City: Atlanta, GA
For many years, the Postal Service received requests for stamps that could be used for special occasions.
These were the first U.S. stamps to be specifically created for a specialized retail market and the first U.S. booklet to have the UPC (Universal Product Code) bar code on the cover.
On March 4, 1924, the song and melody of "Happy Birthday to You" were printed in a songbook. One of the world's most famous songs, it has long been the center of controversy over ownership and copyright status for years.
According to tradition, the tune we all know today as "Happy Birthday" was originally written in the late 1800s as "Good Morning to All." Sisters Patty and Mildred Hill claimed they wrote the song for kindergarteners in Louisville, Kentucky.
The sisters wanted to create a song that would be easy for the children to sing. Reportedly, they may have taken some of the tune and lyrical ideas from other existing songs, such as "Happy Greetings to All" "Good Night to You All," "A Happy New Year to All," and "A Happy Greeting to All."
The sisters' song went "Good morning to you, Good morning to you, Good morning, dear children, Good morning to all." The sisters first published the tune in their songbook, Song Stories for Kindergarten in 1893. It's likely that the class may have added in "Happy Birthday" to the tune to celebrate the childrens' birthdays, which may have led to later printings including "Happy Birthday."
In the coming years, versions of the song appeared in various books, some which included the "Happy Birthday" lyrics in a later verse, though it's unknown who actually wrote them. Then on March 4, 1924, Claydon Sunny printed the melody and "Happy Birthday" lyrics together in a songbook. This was reportedly at the request of Jessica Hill, sister of Patty and Mildred.
The "Happy Birthday" song quickly caught on and soon it was being used without royalties. In 1931, it was in the Broadway musical The Band Wagon. Western Union also used it in their first singing telegram, leading Jessica to campaign for the song to be copyrighted. In 1934, she managed to secure a copyright for "Happy Birthday" because of its similarities to "Good Morning to All." The following year, several piano arrangements and an unused verse of "Happy Birthday to You" were copyrighted by the Summy Company, crediting Preston Ware Orem for the piano arrangements and Mrs. R.R. Forman for the lyrics. However, his claim was later found to be baseless.
The Hill family had the copyright for the song if it was used for profit through 1991. This was then extended to 2030. In 1988, Warner Music assumed ownership of the copyright and received $2 million in royalties every year for it. They claimed copyright for the song anytime it was used in film, television, radio, and anywhere in the public where the majority of the people singing weren't family or friends.
Over the years, some argued the validity of the copyright, particularly the fact that it's unknown who wrote the lyrics to "Happy Birthday." Beginning in 2010, a campaign was launched to disprove the Hills' ownership of the melody. And in 2013, a filmmaker took Warner Music to court over the song. Then in 2015, a judge ruled that the song wasn't under copyright, and royalties wouldn't need to be paid to Warner Music anymore. This made the song part of the public domain.
According to the Guinness Book of World Records, "Happy Birthday to You" is the most popular song in the English language.
1987 22c Special Occasions
1987 22c Special Occasions: Congratulations!
1987 22c Special Occasions: Get Well!
1987 22c Special Occasions: Thank You!
1987 22c Special Occasions: Love You, Dad!
1987 22c Special Occasions: Best Wishes!
1987 22c Special Occasions: Love you, Mother!
1987 22c Special Occasions: Keep in Touch!
1988 25c Happy Birthday
1987 22c Bicentenary Statehood: Massachusetts
1988 25c Thinking of You
1988 25c Love You
1988 24.1c Transportation Series: Tandem Bicycle, 1890s
1987 22c Bicentenary Statehood: Maryland Statehood
1988 25c Best Wishes
1987 17.5c Transportation Series: Race Car, 1911
1985 21.1c Sealed Envelopes
1989 28c Great Americans: Sitting Bull
1987 22c United Way
1987-88 25c Flag and Clouds, booklet single

redpajama_set_name: RedPajamaCommonCrawl


Auditions for A Streetcar Named Desire by Tennessee Williams directed by Shannon Knapp will be held on Saturday, March 2, 11am - 3pm at the Spartan Community Center of Hazelwood (134 E. Elizabeth Street, Pittsburgh, PA 15207). Non-equity, $200 stipend.
Casting all roles except Stanley Kowalski and Blanche DuBois. Actors of color will be given strong preference.
Rehearsals will be evenings and weekends May 28 - July 3 (not all actors called to every rehearsal) and the show will run July 5 - July 28. All rehearsals and performances will take place at the Spartan Community Center of Hazelwood. Swings/understudies a possibility. For auditions, prepared monologues are not necessary; rather, actors will be asked to read sides with the actors cast as Stanley and Blanche (Brett Sullivan Santry and Alyssa Herron). Company observes an AEA break schedule in rehearsal. Email Stage Manager Jason Via at pcp.auditions@gmail.com to reserve your slot. Walk-ins will be accommodated as time permits.


text:
Posts Tagged: Conflict
Will Pakistan Counter India's "Water Bomb" With a Nuclear Bomb?
By Russ Wellen, December 13, 2011
Indian dams threaten Pakistani water sources.
Interview with Christian Parenti
By Michael Busch, September 29, 2011
The author of Tropic of Chaos talks about India, China, and the mentality of the armed lifeboat.
Global Warming, Global Violence
By Alexander Zaitchik, September 15, 2011
Christian Parenti's new book looks at the intersection of climate change and conflict.
A Haggadah for AIPAC
By J.A. Myerson, May 30, 2011
Instead of children, imagine if AIPAC members asked the Haggadah questions.
Palestine: the Logical Locus of Les Onzards
Palestine, centrally significant to the Arab world, stands every chance of being the locus of the democracy movement.
Cynical Maneuvering by Democratic Leaders Quashes Recognition of a Palestinian State
By Stephen Zunes, December 18, 2010
Democrats push through yet another anti-Palestinian resolution.
Fireground Rules, Part 2: A Scheme is Not a Vision
By John Goekler, December 9, 2010
Wildfires, like conflicts between states, are fast, dynamic and fierce.
Which Knot Needs to Be Unraveled First — Israel-Palestine or Iran's Nuclear Program?
By Michael Busch, November 22, 2010
Does President Obama have enough political capital to lead the Middle-East peace process?
The Global Water Crisis and the Coming Battle for the Right to Water
By Maude Barlow, February 25, 2008
The three water crises – dwindling freshwater supplies, inequitable access to water and the corporate control of water – pose the greatest threat of our time to the planet and to our survival.
Albert Heta
Artist and Director of the Center for Contemporary Art in Pristina Albert Heta debates the political and social consequences of art in times of conflict.


Made from tough porcelain, the Jersey Pottery Bachîn ceramic Small Bowl features an iconic design inspired by the hammer-engraved patterns of traditional Jersey brass cooking pots called bachîn. Durable enough for everyday use, it is perfect for serving nuts, olives, dips or condiments. Alternatively, this delightful little bowl can be used as decorative holder for jewellery or tea lights.


text:
O chamado papiro de Carlsberg I é uma cópia do livro de Nut, deusa do céu e parte dos seus textos encontram-se nos túmulos dos faraós Seti I e Ramessés IV. Neste papiro encontram-se testemunhos de acontecimentos astronômicos essencialmente ligados ao nascimento da estrela Sirius nos céus orientais. Este documento diz que, depois do desaparecimento por 70 dias de "Soped" no céu ocidental, ele reaparece ao lado do deus Khépri.

Segundo a mitologia, a estrela Sirius é chamada "Soped" que representa o deus Osíris, o símbolo da realeza, que representa a vegetação e a vida no Além. Assim o nascimento helíaco de Sirius repete-se ano após ano com a periodicidade próxima do ano trópico, ou seja, em data fixa durante 3000 anos. Este fato proporcionou a criação do calendário egípcio na qual o ano era dividido em 12 meses de 30 dias acrescido de 5 dias especiais para homenagear os deuses Horus, Set, Ísis e Osíris.

Ligações externas

Egiptologia
Papiros

redpajama_set_name: RedPajamaWikipedia


At Fan & Fuel, we love music, and we love a good underdog story. If you walked into our office at any given moment, you'd hear music playing from the boss's office. Whenever we discover a new artist, we usually take a minute to talk about what makes their sound unique, who they remind us of, then we get back to work.
Last Friday as I was on my way home from work, I stumbled across a new song on the Discover page of my Soundcloud that really caught my attention. I rarely ever listen to anything on my Discover page, simply because it's a shot in the dark, but when I scrolled to this song on my feed I noticed something unusual.
JAMESIK, a relatively obscure producer, remixes a popular rap song and, somehow, it gets reposted by The Chainsmokers, a worldwide EDM sensation with over 981,000 followers. Once a song is reposted on Soundcloud, it's instantly launched onto your profile, where all of your followers now have access to a song they may have never heard otherwise. It had only been reposted a couple minutes before I stumbled upon it, so the stats on the song were basically untouched from The Chainsmokers' massive circle of influence. One click initiated a landslide of exposure for the young artist, leading another prominent artist, Kill Paris, to repost another one of JAMESIK's songs, "you should try it". After getting in touch with James Edmund, the man behind the JAMESIK moniker, I gained some valuable insight into the domino-effect that transpired following the initial repost of his track.
What makes this case study so interesting is that, before the Chainsmokers got their hands on this track, it only had 1300 views and about 150 likes. Less than a week after it was reposted, it skyrocketed to over 44,000 views and 1,430 likes. Let me help put this in perspective. A guy producing music at his home in San Jose gets a quick head nod from a titan in the music industry, and his circle of influence expands by over 3300% with a click.
When I brought this up at the office on Monday, we quickly realized that there's a lesson to be learned from this phenomenon. No matter how obscure an artist or brand might be at first, the right promotion on the right platform can give anybody the exposure they need to reach their target audience. In Logic's song '44 Bars', he sheds light on a known truth in the industry, "People don't buy music in this day and age, they buy the brand." In other words, the product itself is less of a driving force than the consumer's personal relationship with that product. Essentially, marketing is all about getting peoples attention, initiating a process which then builds familiarity over time. The relationship that's forged in the process, whether it's with a brand or an artist, is the lifeblood driving the product, the force of attraction uniting producers with consumers.
In our eyes, what sets Soundcloud apart as a platform for music distribution is the ability to transfer momentum from one artist to the next, all with a single click of the repost button. While platforms vary from site to site, certain themes still ring true regardless of the product being pushed. Brand and identity are every bit as essential in music as they are in business, and at Fan & Fuel, we look at every case study as an opportunity to hone our craft and further our vision moving forward.


Module "c:\program files\swyxit!\voip.dll" failed to register. HRESULT [...]. Contact your support personnel.
The voip.dll is required for a certain USB handset type. The installation of this file is obsolete on Windows NT4 since there is no USB support anyway.
Please click on ignore and proceed with the installation.
Has been fixed with new version.


text:
1935 Thomas 2021
Thomas M. Quirk
November 14, 1935 — March 15, 2021
WINCHENDON – Thomas M. Quirk, 85, of 369 Maple Street, died peacefully Monday afternoon, March 15, 2021 in Heywood Hospital, Gardner, surrounded by his family.
He was born in Winchendon on November 14, 1935, son of the late Thomas M. and Marguerite (Bushell) Quirk, each of whom were direct descendants of County Kerry Ireland. Tom was a 1953 graduate of Murdock High School, where he excelled as a member of the baseball team and secured a tryout with the Major League Chicago Cubs. Following high school, Tom proudly served his country as a member of the United States Army.
Tom worked for 20 years as a shipper at Winchendon Furniture and then worked at the former Walter E. Fernald School in direct care until his retirement. He was a member of Immaculate Heart of Mary Church, Eugene M. Connor Post 193 American Legion and the 25th Infantry Association. His hobbies were reading, watching sports, surfing online and connecting with family and friends. He was known as a military and history buff. He was a lifelong baseball fan of the former Boston/Milwaukee/Atlanta Braves and he followed the career and legacy of Henry Aaron. He had a quick wit, lover of all things Irish, had a passion or music and made friends with anyone he met.
His wife of 50 years, Margaret M. "Peggy" Quirk, died in 2020. He leaves two sons, Wayne Patria of Winchendon and Earl "Pat" Patria of Winchendon; four grandchildren, Derek Patria and his love Sue Ritson of Lowell, Brian Patria and his wife Angel of Athol, Jennifer Wilson and her husband Tim of Ashland, MA and Melissa Patria Weaver and her husband Jeff of Concord, NH; eleven great grandchildren, Natashia, Drew, Amanda, Kailyn, Jacob, Allison, Jack, Zachary, Curtis, Xander and Gage; two nephews, Ken Smith and Jim Smith; one great niece Jen Smith and three great nephews, Benjamin Smith, Brandon Smith and Zachary Valiere Smith. He also leaves cousins and seven godchildren, Tanya, Anne, Steve, Vickie, Todd, Sue and Jim.
A Mass of Christian Burial will be held Monday, March 22, 2021 at 10 A.M. in Immaculate Heart of Mary Church, 52 Spruce Street, Winchendon. Calling hours will be held Monday from 8:30 to 9:30 A.M. in Stone-Ladeau Funeral Home, 343 Central Street, preceding the mass.
Masks and social distancing are required. The funeral will be live streamed and may be viewed on the funeral home Facebook page.
Burial will be in Massachusetts Veterans' Memorial Cemetery, 111 Glenallen Street, Winchendon.
To order memorial trees or send flowers to the family in memory of Thomas M. Quirk, please visit our flower store.
8:30 - 9:30am (Eastern time)


Innovative engineering and technology are at the core of what makes a Denon product so iconic. Through a disciplined approach to design and production, their engineers ensure that only superb craftsmanship, precision engineering and impeccable performance goes into every component. The solutions are often born through passionately studying examples from the widest array of imaginable fields – including physics, electronics, mechanical engineering, art and nature.
Denon's constant quest to create the perfect entertainment component has given them invaluable inspiration for not only the most powerful technical solutions but also the most convenient features to satisfy a diverse set of entertainment needs. That is why we tirelessly transform creative ideas into leading innovations within our industry.


Solve serious behavior challenges in K–8 classrooms with this easy-to-use book, the first practical guide to the research-proven Prevent-Teach-Reinforce (PTR) model. Developed by some of the most respected authorities on positive behavior support, this innovative model gives school-based teams a five-step plan for reducing problems unresolved by typical behavior management strategies.
On the included CD-ROM are all the printable forms and tools needed to implement PTR, such as Behavior Support Plan templates and a Functional Behavioral Assessment. With this comprehensive model, education professionals will resolve even the toughest classroom behavior challenges—and remove a significant barrier to effective teaching and student achievement.
The PTR model—5 steps to better behavior!


There has been a unique and profitable opportunity in Broadcom Ltd (NASDAQ:AVGO) options that benefits simply from the stock not collapsing.
The company's focus is in wireless and as a chipmaker that supplies chips to help speed up processing in cloud data centers.
Broadcom Ltd is best known as the tech marvel that powers Apple's iPhone, Samsung's Alphabet Inc (NASDAQ:GOOGL) Android driven devices as well as Google Pixel smartphones with chips that reduce interference from other communications devices. As smartphones get smarter, the company has grown on smartphone demand in China and diversified through acquisitions.
But, with the market near all-time highs it's a reasonable question to ask if there is way to profit from Broadcom simply not seeing its stock drop a lot rather than a continuation of a stock rise. The answer is a resounding yes.
Selling an out of the money put spread benefits if the stock rises, but it also profits if the stock simply doesn't drop a lot. It's "semi-bullish," but really, it's just "not very bearish." Here are the results of selling an out of the money put spread, every week, returned over the last 2-years in Broadcom Limited.
It's curious how this strategy can actually be a loser even though the stock is ripping. But AVGO has some odd stock dynamics we need to address.
In any week, if the put spread loses 50% of its value, let's cut it off, and trade the next week. We are effectively removing three-quarters of the downside risk.
We can see a 50 percentage point increase in return while reducing the risk dramatically. Yes, we have reduced risk by 75% and the return is actually higher.
If our analysis is correct, this stop loss implementation of shorting a put spread should have worked better than the normal strategy of just selling and holding for all time periods.
The key to option trading is quite simple -- understanding the dynamics of the stock you're looking at allows you to adjust the option strategy to reflect those dynamics.
This could have been any company -- like Apple or Amazon, or any ETF and any option strategy. What we're really seeing is the radical difference in applying an option strategy with analysis ahead of time, whether that's a stop loss or avoiding earnings, or both. This is how people profit from the option market -- it's preparation, not luck.
The author has no position in Broadcom Ltd (NASDAQ:AVGO) at the time of this writing.


A New Revenge is the very definition of a supergroup. Featuring one of the finest voices in metal of all time, Tim 'Ripper' Owens (whose voice is all over albums from Judas Priest, Iced Earth and Yngwie Malmsteen), one of the most versatile and name checked guitarists in rock, Keri Kelli (Slash's Snake Pit, Alice Cooper, Vince Neil Band and a hundred more), the most iconic bass player in heavy metal history, Rudy Sarzo (whose work with Ozzy Osbourne, Dio, Whitesnake and many more has earned him an almost revered status in heavy music) and longtime Scorpions drummer James Kottak (also from Montrose, Warrant, Kingdom Come & more). The foursome is an explosive combination with every band member's skillset and battle tested charisma breaking through the bleak wasteland of current day modern metal. Razor sharp riffs, thunderous drums and those soaring vocals that come charging in from on high to lay waste to the landscape. A New Revenge are forged from the very heart of heavy metal.


text:
var extension = require('bindings')('alienfx.node');

var assert = require('assert');
var utilities = require('../utilities');

describe('exports: structural tests', function () {

    describe('getVersion()', function () {
        this.timeout(0);

        it('should be a function', function () {
            assert.equal(typeof extension.getVersion, 'function');
        });

        it('should not require any arguments', function () {
            assert.doesNotThrow(function () {
                extension.getVersion();
            }, Error);
        });

        it('should allow callback as a first argument', function (done) {
            assert.throws(function () {
                extension.getVersion(null);
            }, TypeError);

            assert.doesNotThrow(function () {
                extension.getVersion(done);
            });
        });

        it('should not complete synchonously', function (done) {
            var completed = false;

            extension.getVersion(done);

            assert.strictEqual(completed, false);
        });
    });

    describe('getVersionSync()', function () {
        this.timeout(0);

        it('should be a function', function () {
            assert.equal(typeof extension.getVersionSync, 'function');
        });

        it('should require atleast 1 argument', function () {
            assert.doesNotThrow(function () {
                extension.getVersionSync({});
            });

            assert.throws(function () {
                extension.getVersionSync();
            }, Error);
        });

        it('should require first argument of type object', function () {
            assert.doesNotThrow(function () {
                extension.getVersionSync({});
            });

            assert.throws(function () {
                extension.getVersionSync(null);
            }, TypeError);
        });
    });

    describe('initialize()', function () {
        this.timeout(0);

        it('should be a function', function () {
            assert.equal(typeof extension.initialize, 'function');
        });

        it('should not require any arguments', function () {
            assert.doesNotThrow(function () {
                extension.initialize();
            }, Error);
        });

        it('should allow callback as a first argument', function (done) {
            assert.throws(function () {
                extension.initialize(null);
            }, TypeError);

            assert.doesNotThrow(function () {
                extension.initialize(function () {
                    extension.releaseSync();
                    done();
                });
            });
        });

        it('should not complete synchonously', function (done) {
            var completed = false;

            extension.initialize(function () {
                extension.releaseSync();
                done();
            });

            assert.strictEqual(completed, false);
        });
    });

    describe('initializeSync()', function () {
        this.timeout(0);

        it('should be a function', function () {
            assert.equal(typeof extension.initializeSync, 'function');
        });

        it('should not require any arguments', function () {
            assert.doesNotThrow(function () {
                extension.initializeSync();
            });

            extension.releaseSync();
        });
    });

    describe('release', function () {
        this.timeout(0);

        it('should be a function', function () {
            assert.equal(typeof extension.release, 'function');
        });

        it('should not require any arguments', function () {
            assert.doesNotThrow(function () {
                extension.release();
            }, Error);
        });

        it('should allow callback as a first argument', function (done) {
            assert.throws(function () {
                extension.release(null);
            }, TypeError);

            assert.doesNotThrow(function () {
                extension.release(done);
            });
        });

        it('should not complete synchonously', function (done) {
            var completed = false;

            extension.release(done);

            assert.strictEqual(completed, false);
        });
    });

    describe('releaseSync()', function () {
        this.timeout(0);

        it('should be a function', function () {
            assert.equal(typeof extension.releaseSync, 'function');
        });

        it('should not require any arguments', function () {
            assert.doesNotThrow(function () {
                extension.releaseSync();
            });
        });
    });

    describe('reset()', function () {

        it('should be a function', function () {
            assert.equal(typeof extension.reset, 'function');
        });

        it('should not require any arguments', function () {
            assert.doesNotThrow(function () {
                extension.reset();
            });
        });
    });

    describe('light()', function () {

        it('should be a function', function () {
            assert.equal(typeof extension.light, 'function');
        });

        it('should require atleast 2 arguments', function () {
            assert.doesNotThrow(function () {
                extension.light(0, 0);
            });

            assert.throws(function () {
                extension.light();
            }, Error);

            assert.throws(function () {
                extension.light(0);
            }, Error);
        });

        it('should require first argument of type number', function () {
            assert.doesNotThrow(function () {
                extension.light(0, 0);
            });

            assert.throws(function () {
                extension.light(null, 0);
            }, TypeError);
        });

        it('should require second argument of type number', function () {
            assert.doesNotThrow(function () {
                extension.light(0, 0);
            });

            assert.throws(function () {
                extension.light(0, null);
            }, TypeError);
        });

        it('should allow negative numbers as second argument', function () {
            var color = (0x80000000 | 0);

            assert.doesNotThrow(function () {
                extension.light(0, color);
            });
        });
    });

    describe('actionColor()', function () {

        it('should be a function', function () {
            assert.strictEqual(typeof extension.actionColor, 'function');
        });

        it('should require atleast 3 arguments', function () {
            assert.doesNotThrow(function () {
                extension.actionColor(0, extension.Action.COLOR, 0);
            });

            assert.throws(function () {
                extension.actionColor();
            }, Error);

            assert.throws(function () {
                extension.actionColor(0, extension.Action.COLOR);
            }, Error);
        });

        it('should require first argument of type number', function () {
            assert.doesNotThrow(function () {
                extension.actionColor(0, extension.Action.COLOR, 0);
            });

            assert.throws(function () {
                extension.actionColor(null, extension.Action.COLOR, 0);
            }, TypeError);
        });

        it('should require second argument of type number', function () {
            assert.doesNotThrow(function () {
                extension.actionColor(0, extension.Action.COLOR, 0);
            });

            assert.throws(function () {
                extension.actionColor(0, null, 0);
            }, TypeError);
        });

        it('should require third argument of type number', function () {
            assert.doesNotThrow(function () {
                extension.actionColor(0, extension.Action.COLOR, 0);
            });

            assert.throws(function () {
                extension.actionColor(0, extension.Action.COLOR, null);
            }, TypeError);
        });

        it('should allow negative numbers as third argument', function () {
            var color = (0x80000000 | 0);

            assert.doesNotThrow(function () {
                extension.actionColor(0, extension.Action.COLOR, color);
            });
        });
    });

    describe('actionColorEx()', function () {

        it('should be a function', function () {
            assert.strictEqual(typeof extension.actionColorEx, 'function');
        });

        it('should require atleast 4 arguments', function () {
            assert.doesNotThrow(function () {
                extension.actionColorEx(0, extension.Action.COLOR, 0, 0);
            });

            assert.throws(function () {
                extension.actionColorEx();
            }, Error);

            assert.throws(function () {
                extension.actionColorEx(0, extension.Action.COLOR);
            }, Error);

            assert.throws(function () {
                extension.actionColorEx(0, extension.Action.COLOR, 0);
            }, Error);
        });

        it('should require first argument of type number', function () {
            assert.doesNotThrow(function () {
                extension.actionColorEx(0, extension.Action.COLOR, 0, 0);
            });

            assert.throws(function () {
                extension.actionColorEx(null, extension.Action.COLOR, 0, 0);
            }, TypeError);
        });

        it('should require second argument of type number', function () {
            assert.doesNotThrow(function () {
                extension.actionColorEx(0, extension.Action.COLOR, 0, 0);
            });

            assert.throws(function () {
                extension.actionColorEx(0, null, 0, 0);
            }, TypeError);
        });

        it('should require third argument of type number', function () {
            assert.doesNotThrow(function () {
                extension.actionColorEx(0, extension.Action.COLOR, 0, 0);
            });

            assert.throws(function () {
                extension.actionColorEx(0, extension.Action.COLOR, null, 0);
            }, TypeError);
        });

        it('should allow negative numbers as third argument', function () {
            var color = (0x80000000 | 0);

            assert.doesNotThrow(function () {
                extension.actionColorEx(0, extension.Action.COLOR, color, 0);
            });
        });

        it('should require fourth argument of type number', function () {
            assert.doesNotThrow(function () {
                extension.actionColorEx(0, extension.Action.COLOR, 0, 0);
            });

            assert.throws(function () {
                extension.actionColorEx(0, extension.Action.COLOR, 0, null);
            }, TypeError);
        });

        it('should allow negative numbers as fourth argument', function () {
            var color = (0x80000000 | 0);

            assert.doesNotThrow(function () {
                extension.actionColorEx(0, extension.Action.COLOR, 0, color);
            });
        });
    });

    describe('update()', function () {

        it('should be a function', function () {
            assert.equal(typeof extension.update, 'function');
        });

        it('should not require any arguments', function () {
            assert.doesNotThrow(function () {
                extension.update();
            });
        });
    });

    describe('updateDefault()', function () {

        it('should be a function', function () {
            assert.equal(typeof extension.updateDefault, 'function');
        });

        it('should not require any arguments', function () {
            assert.doesNotThrow(function () {
                extension.updateDefault();
            });
        });
    });

    describe('Color', function () {

        it('should be an object', function () {
            assert.equal(typeof extension.Color, 'object');
        });

        it('should contain predefined colors constants', function () {
            assert.equal(extension.Color.OFF, 0x00000000);
            assert.equal(extension.Color.BLACK, 0x00000000);
            assert.equal(extension.Color.RED, 0x00FF0000);
            assert.equal(extension.Color.GREEN, 0x0000FF00);
            assert.equal(extension.Color.BLUE, 0x000000FF);
            assert.equal(extension.Color.WHITE, 0x00FFFFFF);
            assert.equal(extension.Color.YELLOW, 0x00FFFF00);
            assert.equal(extension.Color.ORANGE, 0x00FF8000);
            assert.equal(extension.Color.PINK, 0x00FF80FF);
            assert.equal(extension.Color.CYAN, 0x0000FFFF);
        });
    });

    describe('Brightness', function () {

        it('should be an object', function () {
            assert.equal(typeof extension.Brightness, 'object');
        });

        it('should contain predefined brightness constants', function () {
            assert.equal(extension.Brightness.FULL, 0xFF000000);
            assert.equal(extension.Brightness.HALF, 0x80000000);
            assert.equal(extension.Brightness.MIN, 0x00000000);
        });
    });

    describe('DeviceType', function () {

        it('should be an object', function () {
            assert.equal(typeof extension.DeviceType, 'object');
        });

        it('should contain predefined device type constants', function () {
            assert.equal(extension.DeviceType.UNKNOWN, 0x00);
            assert.equal(extension.DeviceType.NOTEBOOK, 0x01);
            assert.equal(extension.DeviceType.DESKTOP, 0x02);
            assert.equal(extension.DeviceType.SERVER, 0x03);
            assert.equal(extension.DeviceType.DISPLAY, 0x04);
            assert.equal(extension.DeviceType.MOUSE, 0x05);
            assert.equal(extension.DeviceType.KEYBOARD, 0x06);
            assert.equal(extension.DeviceType.GAMEPAD, 0x07);
            assert.equal(extension.DeviceType.SPEAKER, 0x08);
            assert.equal(extension.DeviceType.OTHER, 0xFF);
        });
    });

    describe('Position', function () {

        it('should be an object', function () {
            assert.equal(typeof extension.Position, 'object');
        });

        it('should contain predefined position constants', function () {

            // Near Z-plane light definitions
            assert.equal(extension.Position.FRONT_LOWER_LEFT, 0x00000001);
            assert.equal(extension.Position.FRONT_LOWER_CENTER, 0x00000002);
            assert.equal(extension.Position.FRONT_LOWER_RIGHT, 0x00000004);
            assert.equal(extension.Position.FRONT_MIDDLE_LEFT, 0x00000008);
            assert.equal(extension.Position.FRONT_MIDDLE_CENTER, 0x00000010);
            assert.equal(extension.Position.FRONT_MIDDLE_RIGHT, 0x00000020);
            assert.equal(extension.Position.FRONT_UPPER_LEFT, 0x00000040);
            assert.equal(extension.Position.FRONT_UPPER_CENTER, 0x00000080);
            assert.equal(extension.Position.FRONT_UPPER_RIGHT, 0x00000100);

            // Mid Z-plane light definitions
            assert.equal(extension.Position.MIDDLE_LOWER_LEFT, 0x00000200);
            assert.equal(extension.Position.MIDDLE_LOWER_CENTER, 0x00000400);
            assert.equal(extension.Position.MIDDLE_LOWER_RIGHT, 0x00000800);
            assert.equal(extension.Position.MIDDLE_MIDDLE_LEFT, 0x00001000);
            assert.equal(extension.Position.MIDDLE_MIDDLE_CENTER, 0x00002000);
            assert.equal(extension.Position.MIDDLE_MIDDLE_RIGHT, 0x00004000);
            assert.equal(extension.Position.MIDDLE_UPPER_LEFT, 0x00008000);
            assert.equal(extension.Position.MIDDLE_UPPER_CENTER, 0x00010000);
            assert.equal(extension.Position.MIDDLE_UPPER_RIGHT, 0x00020000);

            // Far Z-plane light definitions
            assert.equal(extension.Position.REAR_LOWER_LEFT, 0x00040000);
            assert.equal(extension.Position.REAR_LOWER_CENTER, 0x00080000);
            assert.equal(extension.Position.REAR_LOWER_RIGHT, 0x00100000);
            assert.equal(extension.Position.REAR_MIDDLE_LEFT, 0x00200000);
            assert.equal(extension.Position.REAR_MIDDLE_CENTER, 0x00400000);
            assert.equal(extension.Position.REAR_MIDDLE_RIGHT, 0x00800000);
            assert.equal(extension.Position.REAR_UPPER_LEFT, 0x01000000);
            assert.equal(extension.Position.REAR_UPPER_CENTER, 0x02000000);
            assert.equal(extension.Position.REAR_UPPER_RIGHT, 0x04000000);

            // Combination bit masks
            assert.equal(extension.Position.ALL, 0x07FFFFFF);
            assert.equal(extension.Position.ALL_RIGHT, 0x04924924);
            assert.equal(extension.Position.ALL_LEFT, 0x01249249);
            assert.equal(extension.Position.ALL_UPPER, 0x070381C0);
            assert.equal(extension.Position.ALL_LOWER, 0x001C0E07);
            assert.equal(extension.Position.ALL_FRONT, 0x000001FF);
            assert.equal(extension.Position.ALL_REAR, 0x07FC0000);
        });
    });

    describe('Result', function () {

        it('should be an object', function () {
            assert.equal(typeof extension.Result, 'object');
        });

        it('should contain predefined result constants', function () {
            assert.equal(extension.Result.SUCCESS, 0x00);
            assert.equal(extension.Result.FAILURE, 0x01);
            assert.equal(extension.Result.NOINIT, 0x02);
            assert.equal(extension.Result.NODEVS, 0x03);
            assert.equal(extension.Result.NOLIGHTS, 0x04);
            assert.equal(extension.Result.BUFFSIZE, 0x05);
        });
    });

    describe('Action', function () {

        it('should be an object', function () {
            assert.equal(typeof extension.Action, 'object');
        });

        it('should contain predefined action constants', function () {
            assert.equal(extension.Action.MORPH, 0x00000001);
            assert.equal(extension.Action.PULSE, 0x00000002);
            assert.equal(extension.Action.COLOR, 0x00000003);
        });
    });

    describe('isAvailable', function () {

        it('should be a boolean', function () {
            assert.equal(typeof extension.isAvailable, 'boolean');
        });
    });

    describe('getNumDevices()', function () {

        it('should be a function', function () {
            assert.equal(typeof extension.getNumDevices, 'function');
        });

        it('should not require any arguments', function () {
            assert.doesNotThrow(function () {
                extension.getNumDevices();
            });
        });

        it('should allow callback as a first argument', function (done) {
            assert.throws(function () {
                extension.getNumDevices(null);
            }, TypeError);

            assert.doesNotThrow(function () {
                extension.getNumDevices(done);
            });
        });

        it('should not complete synchonously', function (done) {
            var completed = false;

            extension.getNumDevices(done);

            assert.strictEqual(completed, false);
        });
    });

    describe('getNumDevicesSync()', function () {

        it('should be a function', function () {
            assert.equal(typeof extension.getNumDevicesSync, 'function');
        });

        it('should require atleast 1 argument', function () {
            assert.doesNotThrow(function () {
                extension.getNumDevicesSync({});
            });

            assert.throws(function () {
                extension.getNumDevicesSync();
            }, Error);
        });

        it('should require first argument of type object', function () {
            assert.doesNotThrow(function () {
                extension.getNumDevicesSync({});
            });

            assert.throws(function () {
                extension.getNumDevicesSync(null);
            }, TypeError);
        });
    });

    describe('getDeviceDescription()', function () {

        it('should be a function', function () {
            assert.equal(typeof extension.getDeviceDescription, 'function');
        });

        it('should require atleast 1 argument', function (done) {
            assert.throws(function () {
                extension.getDeviceDescription();
            }, Error);

            assert.doesNotThrow(function () {
                extension.getDeviceDescription(0, done);
            }, Error);
        });

        it('should require first argument of type number', function (done) {
            assert.throws(function () {
                extension.getDeviceDescription(null, utilities.functions.empty);
            }, TypeError);

            assert.doesNotThrow(function () {
                extension.getDeviceDescription(0, done);
            });
        });

        it('should allow callback as a second argument', function (done) {
            assert.throws(function () {
                extension.getDeviceDescription(0, null);
            }, TypeError);

            assert.doesNotThrow(function () {
                extension.getDeviceDescription(0, done);
            });
        });

        it('should not complete synchonously', function (done) {
            var completed = false;

            extension.getDeviceDescription(0, done);

            assert.strictEqual(completed, false);
        });
    });

    describe('getDeviceDescriptionSync()', function () {

       it('should be a function', function () {
            assert.equal(typeof extension.getDeviceDescriptionSync, 'function');
        });

        it('should require atleast 2 arguments', function () {
            assert.doesNotThrow(function () {
                extension.getDeviceDescriptionSync(0, {});
            });

            assert.throws(function () {
                extension.getDeviceDescriptionSync();
            }, Error);

            assert.throws(function () {
                extension.getDeviceDescriptionSync(0);
            }, Error);
        });

        it('should require first argument of type number', function () {
            assert.doesNotThrow(function () {
                extension.getDeviceDescriptionSync(0, {});
            });

            assert.throws(function () {
                extension.getDeviceDescriptionSync(null, {});
            }, TypeError);
        });

        it('should require second argument of type object', function () {
            assert.doesNotThrow(function () {
                extension.getDeviceDescriptionSync(0, {});
            });

            assert.throws(function () {
                extension.getDeviceDescriptionSync(0, null);
            }, TypeError);
        });
    });

    describe('getNumLights()', function () {

        it('should be a function', function () {
            assert.equal(typeof extension.getNumLights, 'function');
        });

        it('should require atleast 1 argument', function (done) {
            assert.throws(function () {
                extension.getNumLights();
            }, Error);

            assert.doesNotThrow(function () {
                extension.getNumLights(0, done);
            }, Error);
        });

        it('should require first argument of type number', function (done) {
            assert.throws(function () {
                extension.getNumLights(null, utilities.functions.empty);
            }, TypeError);

            assert.doesNotThrow(function () {
                extension.getNumLights(0, done);
            });
        });

        it('should allow callback as a second argument', function (done) {
            assert.throws(function () {
                extension.getNumLights(0, null);
            }, TypeError);

            assert.doesNotThrow(function () {
                extension.getNumLights(0, done);
            });
        });

        it('should not complete synchonously', function (done) {
            var completed = false;

            extension.getNumLights(0, done);

            assert.strictEqual(completed, false);
        });
    });

    describe('getNumLightsSync()', function () {

        it('should be a function', function () {
            assert.equal(typeof extension.getNumLightsSync, 'function');
        });

        it('should require atleast 2 arguments', function () {
            assert.doesNotThrow(function () {
                extension.getNumLightsSync(0, {});
            });

            assert.throws(function () {
                extension.getNumLightsSync();
            }, Error);

            assert.throws(function () {
                extension.getNumLightsSync(0);
            }, Error);
        });

        it('should require first argument of type number', function () {
            assert.doesNotThrow(function () {
                extension.getNumLightsSync(0, {});
            });

            assert.throws(function () {
                extension.getNumLightsSync(null, {});
            }, TypeError);
        });

        it('should require second argument of type object', function () {
            assert.doesNotThrow(function () {
                extension.getNumLightsSync(0, {});
            });

            assert.throws(function () {
                extension.getNumLightsSync(0, null);
            }, TypeError);
        });
    });

    describe('getLightDescription()', function () {

        it('should be a function', function () {
            assert.equal(typeof extension.getLightDescription, 'function');
        });

        it('should require atleast 2 arguments', function (done) {
            assert.throws(function () {
                extension.getLightDescription();
            }, Error);

            assert.throws(function () {
                extension.getLightDescription(0);
            }, Error);

            assert.doesNotThrow(function () {
                extension.getLightDescription(0, 0, done);
            });
        });

        it('should require first argument of type number', function (done) {
            assert.throws(function () {
                extension.getLightDescription(null, 0, utilities.functions.empty);
            }, TypeError);

            assert.doesNotThrow(function () {
                extension.getLightDescription(0, 0, done);
            });
        });

        it('should require second argument of type number', function (done) {
            assert.throws(function () {
                extension.getLightDescription(0, null, utilities.functions.empty);
            }, TypeError);

            assert.doesNotThrow(function () {
                extension.getLightDescription(0, 0, done);
            });
        });

        it('should allow callback as a third argument', function (done) {
            assert.throws(function () {
                extension.getLightDescription(0, 0, null);
            }, TypeError);

            assert.doesNotThrow(function () {
                extension.getLightDescription(0, 0, done);
            });
        });

        it('should not complete synchonously', function (done) {
            var completed = false;

            extension.getLightDescription(0, 0, done);

            assert.strictEqual(completed, false);
        });
    });

    describe('getLightDescriptionSync()', function () {

        it('should be a function', function () {
            assert.equal(typeof extension.getLightDescriptionSync, 'function');
        });

        it('should require atleast 3 arguments', function () {
            assert.doesNotThrow(function () {
                extension.getLightDescriptionSync(0, 0, {});
            });

            assert.throws(function () {
                extension.getLightDescriptionSync();
            }, Error);

            assert.throws(function () {
                extension.getLightDescriptionSync(0);
            }, Error);

            assert.throws(function () {
                extension.getLightDescriptionSync(0, 0);
            }, Error);
        });

        it('should require first argument of type number', function () {
            assert.doesNotThrow(function () {
                extension.getLightDescriptionSync(0, 0, {});
            });

            assert.throws(function () {
                extension.getLightDescriptionSync(null, 0, {});
            }, TypeError);
        });

        it('should require second argument of type number', function () {
            assert.doesNotThrow(function () {
                extension.getLightDescriptionSync(0, 0, {});
            });

            assert.throws(function () {
                extension.getLightDescriptionSync(0, null, {});
            }, TypeError);
        });

        it('should require third argument of type object', function () {
            assert.doesNotThrow(function () {
                extension.getLightDescriptionSync(0, 0, {});
            });

            assert.throws(function () {
                extension.getLightDescriptionSync(0, 0, null);
            }, TypeError);
        });
    });

    describe('getLightLocation()', function () {

        it('should be a function', function () {
            assert.equal(typeof extension.getLightLocation, 'function');
        });

        it('should require atleast 2 arguments', function (done) {
            assert.throws(function () {
                extension.getLightLocation();
            }, Error);

            assert.throws(function () {
                extension.getLightLocation(0);
            }, Error);

            assert.doesNotThrow(function () {
                extension.getLightLocation(0, 0, done);
            });
        });

        it('should require first argument of type number', function (done) {
            assert.throws(function () {
                extension.getLightLocation(null, 0, utilities.functions.empty);
            }, TypeError);

            assert.doesNotThrow(function () {
                extension.getLightLocation(0, 0, done);
            });
        });

        it('should require second argument of type number', function (done) {
            assert.throws(function () {
                extension.getLightLocation(0, null, utilities.functions.empty);
            }, TypeError);

            assert.doesNotThrow(function () {
                extension.getLightLocation(0, 0, done);
            });
        });

        it('should allow callback as a third argument', function (done) {
            assert.throws(function () {
                extension.getLightLocation(0, 0, null);
            }, TypeError);

            assert.doesNotThrow(function () {
                extension.getLightLocation(0, 0, done);
            });
        });

        it('should not complete synchonously', function (done) {
            var completed = false;

            extension.getLightLocation(0, 0, done);

            assert.strictEqual(completed, false);
        });
    });

    describe('getLightLocationSync()', function () {

        it('should be a function', function () {
            assert.equal(typeof extension.getLightLocationSync, 'function');
        });

        it('should require atleast 3 arguments', function () {
            assert.doesNotThrow(function () {
                extension.getLightLocationSync(0, 0, {});
            });

            assert.throws(function () {
                extension.getLightLocationSync();
            }, Error);

            assert.throws(function () {
                extension.getLightLocationSync(0);
            }, Error);

            assert.throws(function () {
                extension.getLightLocationSync(0, 0);
            }, Error);
        });

        it('should require first argument of type number', function () {
            assert.doesNotThrow(function () {
                extension.getLightLocationSync(0, 0, {});
            });

            assert.throws(function () {
                extension.getLightLocationSync(null, 0, {});
            }, TypeError);
        });

        it('should require second argument of type number', function () {
            assert.doesNotThrow(function () {
                extension.getLightLocationSync(0, 0, {});
            });

            assert.throws(function () {
                extension.getLightLocationSync(0, null, {});
            }, TypeError);
        });

        it('should require third argument of type object', function () {
            assert.doesNotThrow(function () {
                extension.getLightLocationSync(0, 0, {});
            });

            assert.throws(function () {
                extension.getLightLocationSync(0, 0, 0);
            }, TypeError);
        });
    });

    describe('getLightColor()', function () {

        it('should be a function', function () {
            assert.equal(typeof extension.getLightColor, 'function');
        });

        it('should require atleast 2 arguments', function (done) {
            assert.throws(function () {
                extension.getLightColor();
            }, Error);

            assert.throws(function () {
                extension.getLightColor(0);
            }, Error);

            assert.doesNotThrow(function () {
                extension.getLightColor(0, 0, done);
            });
        });

        it('should require first argument of type number', function (done) {
            assert.throws(function () {
                extension.getLightColor(null, 0, utilities.functions.empty);
            }, TypeError);

            assert.doesNotThrow(function () {
                extension.getLightColor(0, 0, done);
            });
        });

        it('should require second argument of type number', function (done) {
            assert.throws(function () {
                extension.getLightColor(0, null, utilities.functions.empty);
            }, TypeError);

            assert.doesNotThrow(function () {
                extension.getLightColor(0, 0, done);
            });
        });

        it('should allow callback as a third argument', function (done) {
            assert.throws(function () {
                extension.getLightColor(0, 0, null);
            }, TypeError);

            assert.doesNotThrow(function () {
                extension.getLightColor(0, 0, done);
            });
        });

        it('should not complete synchonously', function (done) {
            var completed = false;

            extension.getLightColor(0, 0, done);

            assert.strictEqual(completed, false);
        });
    });

    describe('getLightColorSync()', function () {

        it('should be a function', function () {
            assert.equal(typeof extension.getLightColorSync, 'function');
        });

        it('should require atleast 3 arguments', function () {
            assert.doesNotThrow(function () {
                extension.getLightColorSync(0, 0, {});
            });

            assert.throws(function () {
                extension.getLightColorSync();
            }, Error);

            assert.throws(function () {
                extension.getLightColorSync(0);
            }, Error);

            assert.throws(function () {
                extension.getLightColorSync(0, 0);
            }, Error);
        });

        it('should require first argument of type number', function () {
            assert.doesNotThrow(function () {
                extension.getLightColorSync(0, 0, {});
            });

            assert.throws(function () {
                extension.getLightColorSync(null, 0, {});
            }, TypeError);
        });

        it('should require second argument of type number', function () {
            assert.doesNotThrow(function () {
                extension.getLightColorSync(0, 0, {});
            });

            assert.throws(function () {
                extension.getLightColorSync(0, null, {});
            }, TypeError);
        });

        it('should require third argument of type object', function () {
            assert.doesNotThrow(function () {
                extension.getLightColorSync(0, 0, {});
            });

            assert.throws(function () {
                extension.getLightColorSync(0, 0, null);
            }, TypeError);
        });
    });

    describe('setLightColor()', function () {

        it('should be a function', function () {
            assert.equal(typeof extension.setLightColor, 'function');
        });

        it('should require atleast 3 arguments', function () {
            assert.doesNotThrow(function () {
                extension.setLightColor(0, 0, utilities.colors.NONE);
            });

            assert.throws(function () {
                extension.setLightColor();
            }, Error);

            assert.throws(function () {
                extension.setLightColor(0);
            }, Error);

            assert.throws(function () {
                extension.setLightColor(0, 0);
            }, Error);
        });

        it('should require first argument of type number', function () {
            assert.doesNotThrow(function () {
                extension.setLightColor(0, 0, utilities.colors.NONE);
            });

            assert.throws(function () {
                extension.setLightColor(null, 0, utilities.colors.NONE);
            }, TypeError);
        });

        it('should require second argument of type number', function () {
            assert.doesNotThrow(function () {
                extension.setLightColor(0, 0, utilities.colors.NONE);
            });

            assert.throws(function () {
                extension.setLightColor(0, null, utilities.colors.NONE);
            }, TypeError);
        });

        it('should require third argument of type object', function () {
            assert.doesNotThrow(function () {
                extension.setLightColor(0, 0, utilities.colors.NONE);
            });

            assert.throws(function () {
                extension.setLightColor(0, 0, null);
            }, TypeError);
        });
    });

    describe('setLightActionColor()', function () {

        it('should be a function', function () {
            assert.equal(typeof extension.setLightActionColor, 'function');
        });

        it('should require atleast 4 arguments', function () {
            assert.doesNotThrow(function () {
                extension.setLightActionColor(0, 0, extension.Action.MORPH, utilities.colors.NONE);
            });

            assert.throws(function () {
                extension.setLightActionColor();
            }, Error);

            assert.throws(function () {
                extension.setLightActionColor(0);
            }, Error);

            assert.throws(function () {
                extension.setLightActionColor(0, 0);
            }, Error);

            assert.throws(function () {
                extension.setLightActionColor(0, 0, extension.Action.MORPH);
            }, Error);
        });

        it('should require first argument of type number', function () {
            assert.doesNotThrow(function () {
                extension.setLightActionColor(0, 0, extension.Action.MORPH, utilities.colors.NONE);
            });

            assert.throws(function () {
                extension.setLightActionColor(null, 0, extension.Action.MORPH, utilities.colors.NONE);
            }, TypeError);
        });

        it('should require second argument of type number', function () {
            assert.doesNotThrow(function () {
                extension.setLightActionColor(0, 0, extension.Action.MORPH, utilities.colors.NONE);
            });

            assert.throws(function () {
                extension.setLightActionColor(0, null, extension.Action.MORPH, utilities.colors.NONE);
            }, TypeError);
        });

        it('should require third argument of type number', function () {
            assert.doesNotThrow(function () {
                extension.setLightActionColor(0, 0, extension.Action.MORPH, utilities.colors.NONE);
            });

            assert.throws(function () {
                extension.setLightActionColor(0, 0, null, utilities.colors.NONE);
            }, TypeError);
        });

        it('should require fourth argument of type object', function () {
            assert.doesNotThrow(function () {
                extension.setLightActionColor(0, 0, extension.Action.MORPH, utilities.colors.NONE);
            });

            assert.throws(function () {
                extension.setLightActionColor(0, 0, extension.Action.MORPH, null);
            }, TypeError);
        });
    });

    describe('setLightActionColorEx()', function () {

        it('should be a function', function () {
            assert.equal(typeof extension.setLightActionColorEx, 'function');
        });

        it('should require atleast 5 arguments', function () {
            assert.doesNotThrow(function () {
                extension.setLightActionColorEx(0, 0, extension.Action.MORPH, utilities.colors.NONE, utilities.colors.NONE);
            });

            assert.throws(function () {
                extension.setLightActionColorEx();
            }, Error);

            assert.throws(function () {
                extension.setLightActionColorEx(0);
            }, Error);

            assert.throws(function () {
                extension.setLightActionColorEx(0, 0);
            }, Error);

            assert.throws(function () {
                extension.setLightActionColorEx(0, 0, extension.Action.MORPH, utilities.colors.NONE);
            }, Error);
        });

        it('should require first argument of type number', function () {
            assert.doesNotThrow(function () {
                extension.setLightActionColorEx(0, 0, extension.Action.MORPH, utilities.colors.NONE, utilities.colors.NONE);
            });

            assert.throws(function () {
                extension.setLightActionColorEx(null, 0, extension.Action.MORPH, utilities.colors.NONE, utilities.colors.NONE);
            }, TypeError);
        });

        it('should require second argument of type number', function () {
            assert.doesNotThrow(function () {
                extension.setLightActionColorEx(0, 0, extension.Action.MORPH, utilities.colors.NONE, utilities.colors.NONE);
            });

            assert.throws(function () {
                extension.setLightActionColorEx(0, null, extension.Action.MORPH, utilities.colors.NONE, utilities.colors.NONE);
            }, TypeError);
        });

        it('should require third argument of type number', function () {
            assert.doesNotThrow(function () {
                extension.setLightActionColorEx(0, 0, extension.Action.MORPH, utilities.colors.NONE, utilities.colors.NONE);
            });

            assert.throws(function () {
                extension.setLightActionColorEx(0, 0, null, utilities.colors.NONE, utilities.colors.NONE);
            }, TypeError);
        });

        it('should require fourth argument of type object', function () {
            assert.doesNotThrow(function () {
                extension.setLightActionColorEx(0, 0, extension.Action.MORPH, utilities.colors.NONE, utilities.colors.NONE);
            });

            assert.throws(function () {
                extension.setLightActionColorEx(0, 0, extension.Action.MORPH, null, utilities.colors.NONE);
            }, TypeError);
        });

        it('should require fifth argument of type object', function () {
            assert.doesNotThrow(function () {
                extension.setLightActionColorEx(0, 0, extension.Action.MORPH, utilities.colors.NONE, utilities.colors.NONE);
            });

            assert.throws(function () {
                extension.setLightActionColorEx(0, 0, extension.Action.MORPH, utilities.colors.NONE, null);
            }, TypeError);
        });
    });

    describe('setTiming()', function () {

        it('should be a function', function () {
            assert.strictEqual(typeof extension.setTiming, 'function');
        });

        it('should require atleast 1 argument', function () {
            assert.doesNotThrow(function () {
                extension.setTiming(200);
            });

            assert.throws(function () {
                extension.setTiming();
            }, Error);
        });

        it('should require first argument of type number', function () {
            assert.doesNotThrow(function () {
                extension.setTiming(200);
            });

            assert.throws(function () {
                extension.setTiming(null);
            }, TypeError);
        });
    });

});

redpajama_set_name: RedPajamaGithub


text:
EnvironmentSociety
Sip Carefully: Plastic Straws and the Individualization of Responsibility
By Kiara Goodwine
"Iced Starbucks" by Jaysin Trevino is licensed under CC BY 2.0 (via Flickr)
In 2015 a video of a sea turtle took the internet by storm and set into action the public outrage over pollution caused by plastic straws. Since then, videos and articles including facts about plastic waste in the world's oceans have been circulating the internet, and plastic pollution has been the topic of more than a few TED Talks. Many anti-plastic advocates made moral appeals to consumers to cut down on their straw usage, and these appeals have steadily grown into an anti-straw environmental movement. On July 9th, coffee mogul Starbucks announced they would be phasing out plastic straws in their cafes nationwide, eliminating plastic straws completely by 2020. However, it did not take long for the blowback to come. New videos and articles began circling social media, this time depicting people with disabilities explaining how the plastic straw ban in businesses, and cities like Seattle and San Francisco makes them feel unwelcome. Is banning plastic straws, like Starbucks did, really an ethical environmental choice? Should the responsibility be on companies or consumers to reduce plastic usage? And do appeals to morality through social media campaigns and public outrage truly effectuate positive change?
So, how is it exactly that what Webster's dictionary refers to as "a tube (as of paper, plastic, or glass) for sucking up a beverage" has become the center of national attention? On the one hand, the specific use of plastic is what many find most bothersome about the straw, and not the straw itself. Take for example USA Today's list of "eco-friendly alternatives" to plastic straws. All of the suggestions are still straws, simply made out of materials other than plastic. Taking the campaign a step further, companies like Strawless Ocean offer what they call an "Impact Kit" which aims to help consumers "track the restaurants or venues you help transition For a Strawless Ocean." From this perspective the problem with straws is the plastic in them. However, from a more sustainable viewpoint, the idea of using any resource to make drinking more convenient, seems inherently wasteful, regardless of whether it's plastic, paper, or metal being used to do so. Maybe the problem does not just lie within the plastic in straws, but the convenient and disposable nature of the straw itself.
But if the problem truly is straws, or the plastic in them, who holds the most responsibility in their usage? On the one hand, the social media campaign and movement have seemed to target individuals, encouraging them to buy their own straws or to cut down on their plastic usage. However, imploring individuals to change their actions as consumers in order to better the environment might reinforce existing inequalities and validate the identity of a person as a consumer as opposed to a citizen. In his essay "Individualization: Plant a Tree, Buy a Bike, Save the World?" Michael Maniates explores the concept he calls "the individualization of responsibility" and how this silent assumption lies behind the majority of mainstream environmental mantras. Though changing one's consumer habits might make a small difference, and will most likely reaffirm one's belief in the importance of holding personal ethics, Maniates argues that by targeting individuals as consumers rather than citizens, the environmental movement only perpetuates consumerism as an economic and cultural system. Maniates does not believe that consumerism can coexist with sustainability, because consumerism relies upon intensive resource use that is ultimately environmentally destructive.
Additionally, Maniates argues that the individualization of responsibility misplaces the burden of environmentally destructive actions. Ordinary citizens are often not directly to blame for the environmentally destructive practices of the monopolies that dominate the economy or for the government's failure to regulate these practices. Maniates points to many decisions and policies made during and after the Reagan administration as the primary justification citizens' lack of moral obligation to change their consumer habits. It is only through re-empowering the public to become more involved in the electorate that lasting positive environmental change can be effectuated.
However, even holding corporations morally responsible for these changes can bring into question the authenticity of their commitments as well as the potential for greenwashing. Greenwashing is "when a company or organization spends more time and money claiming to be 'green' through advertising and marketing than actually implementing business practices that minimize environmental impact." Take for example Starbucks' pledge to phase out all plastic straws by the year 2020 and implement sippy cup lids, which are also made of plastic. Though Starbucks has framed this decision as an environmental and moral one, there are fundamental moral and environmental issues with this business practice. The first is that the lids Starbucks is using in place of straws actually contain a higher amount of plastic than the straws, though supporters defend this aspect of the new lids based on the fact they are made of polypropene, a recyclable plastic. However, anti-plastic straw advocates such as Rachel Lincoln Sarnoff, admit that Starbucks' decision to phase out plastic straws is not as environmental as it may seem. In an interview with Inside Tech she points out the irony in that "The objective really was to phase out straws because they're not recyclable. The shift to this lid really increases the amount of plastic that starbucks is using per cup." As Rachel mentions, and Starbucks claims, the lids can be recycled, whereas straws cannot. However, some may take issue with the idea one must use more plastic in order to be more environmentally friendly. This idea arguably contradicts the doctrine of sustainability, since it ultimately leads to more resources and materials being used.
Additionally, some consumers, such as those with disabilities, rely on the use of straws in order to enjoy drinks from Starbucks and other establishments. Reports of those with disabilities feeling discriminated against have begun circling social media and mainstream news outlets. Many with disabilities are ashamed by not only their inability to access straws, but also the total lack of consideration these business decisions appear to have for them. Disability advocates such as Melissa Blake explain that regardless of Starbucks' intention, "These types of unilateral decisions simply don't take into account the needs of those who will be most impacted." But to Blake, this issue represents a bigger problem that goes beyond Starbucks, or even plastic straws: "The move to eliminate plastic straws is just the latest example of the able-bodied world overlooking the disability community when making policy decisions that will directly affect their lives." She also points out that the Americans with Disabilities Act was enacted in the 1990's to protect Americans with disabilities from the same types of discrimination still present in our social sphere, and from decisions made by businesses increasingly seeking to appeal to fads and public opinion.
From Masterpiece Cakeshop v. Colorado Civil Rights Commission to Starbucks' plastic straw ban, the ethical responsibilities, or lack thereof, of businesses is not an unfamiliar topic of debate. However, whether or not one believes it should be businesses or individuals who are responsible for straw usage is a critical question in terms of understanding who can be held responsible if discrimination occurs: an intolerant society or a business with unethical practices? It seems that the internet has not yet made up its mind on the plastic straw debate, but is is safe to say that we should all sip carefully until then.
Kiara Goodwine is a 2019 alumna of DePauw University and a current law student at the University of Michigan Law School. Kiara first became passionate about ethics and philosophy while serving as a Hillman Intern at the Prindle Institute. Her research on the ethics of consumption culminated in her senior honors thesis "The Ethics of Single-Use Plastics." She has also served as a head coach for a High School Ethics Bowl Team. Her current interests lie in the intersection of human rights and environmental health, dilemmas surrounding collective responsibility, and the morality of law.
View All Articles By Kiara Goodwine


Harley Davidson large mens leather jacket.
Jacket is in brand new condition, never worn while riding. Has venting zippers. Jacket was well over $400 new. Make a reasonable offer!
Harley Davidson XL mens riding jacket.
Tell grizzly953 that you saw this ad on BisManOnline!


For manually replacing and updating other versions of WebDrivers and Selenium, please refer to this guide.
Katalon Studio team strongly suggest users NOT to manually replace or update any WebDrivers. Any changes in drivers may cause runtime bugs for Katalon Studio application.
You can use 32-bit Windows Chromedriver for both 32-bit and 64-bit Windows.
Download preferred Gecko Driver here.


Search for all "Mouse IgG2a"
Mouse anti Mouse IgG2a MOPC-173.
The reagent is intended as isotype control for flow cytometry analysis to establish the amount of non-specific antibody binding. For your particular experiment, use the same concentration of this isotype control antibody as the recommended working concentration of the antigen-specific antibody. Also, when working with prediluted antibodies, dilute the isotype control to the same concentration as is the concentration of the antigen-specific antibody in the prediluted antibody solution you are using. If under particular experimental conditions the background signal of the isotype control is too high (usually when working concentrations of used antibodies are above 10 µg per ml of incubation mixture), change the conditions of your experiment to reduce the background.
The specificity of staining by monoclonal antibodies to target antigens should be verified by establishing the amount of non-specific antibody binding. Especially at higher concentration (more than 15 μg/ml) the antibody staining usually has consignable background. To this end a non-reactive immunoglobulin of the same isotype is included as a negative control for each specific monoclonal antibody used in a particular immunoassay. The monoclonal antibody MOPC-173, generated against an undefined antigen, does not react specifically with mouse, rat and human samples, and hence all the background that could be observed when working with this antibody would be a result of general nonspecific interactions between an mouse IgG2a molecule and the respective sample under the particular conditions. This shall help the customer to set up the experimental conditions so that the nonspecific binding of any antibody is abolished.
Fougereau M, Bourgois A, de Preval C, Rocca-Serra J, Schiff C. The complete sequence of the murine monoclonal immunoglobulin MOPC 173 (IgG2a): genetic implications. Ann Immunol (Paris). 1976 Sep-Oct;127(5):607-31. PubMed PMID: 984731.
Baumal R, Scharff MD. Immunoglobulin biosynthesis by the MOPC 173 mouse myeloma tumor and a variant spleen clone. J Immunol. 1976 Jan;116(1):65-74. PubMed PMID: 812916.
Khoddami V, Cairns BR. Transcriptome-wide target profiling of RNA cytosine methyltransferases using the mechanism-based enrichment procedure Aza-IP. Nat Protoc. 2014 Feb;9(2):337-61. doi: 10.1038/nprot.2014.014. Epub 2014 Jan 16. PubMed PMID: 24434802.
Store the antibody at 2-8°C.
Conjugated with cross-linked Allophycocyanin (APC) under optimum conditions. The conjugate is purified by size-exclusion chromatography.
This antibody reacts with an unknown epitope. It does not react with a variety of resting, activated, live, and fixed mouse, rat and human tissues.


text:
Gunfight in Abilene (1967)
William Hale
Bobby Darin, Emily Banks, Leslie Nielsen, Donnelly Rhodes, Don Galloway, Frank McGrath, Michael Sarrazin
Another Showdown at Abilene
During the Civil War Cal Wayne (Bobby Darin) unintentionally kills his friend and feels guilty for what happened. When he returns home to Abilene he discovers his pre-war sweetheart Amy (Emily Banks) has become engaged to Grant Evers (Leslie Nielsen) the brother of the man he killed and whilst still in love with her is tormented by guilt and won't attempt to win her back. Still believing he has a debt to repay he takes the job of town's sheriff not that he wants to be a lawman again and refuses to carry a gun because of what happened. But with trouble brewing and the discovery of Amy's beau murdered he will have to face his demons to strap on a gun and sort out the trouble in Abilene between farmers and ranchers.
I apologise to all Bobby Darin fans but when I saw he was top billed in "Gunfight in Abilene" my expectations were immediately lowered, not that Darin was a bad actor but in my opinion never a leading man. But here is the good news as Darin accounts for himself nicely in what in truth is a routine 60s western and one which is in fact a remake of "Showdown at Abilene". In fact director William Hale accounts for himself nicely as well with some solid direction but nothing special.
Now as I said "Gunfight in Abilene" is a remake and is routine as we are served up another hero who is haunted by something in his past and on top of that we also have conflict between ranchers and farmers over the fencing off of land. Even how Cal's girl Amy ends up engaged to another man is typical as news reached Abilene during the war that Cal had been killed when in truth he had been captured. As I said "Gunfight in Abilene" has more than a little familiarity about it and if it wasn't for that it was a remake would have only felt like a studio had took a couple of old westerns, remixed the storylines and then picked a few lesser players to star in it.
But it all works in a typical western way with solid performances from the likes of Bobby Darin and Leslie Nielsen and solid western direction from William Hale with a couple of stand out scenes. But it is the sort of Saturday afternoon western which when you've watched it you forget it just as quickly which from memory is how I felt about "Showdown at Abilene" as I had also forgotten that movie until I started to watch this.
What this all boils down is that "Gunfight in Abilene" is just a standard western and whilst solid is also in truth a little tired due to its routine nature. It makes it one of those westerns which a western fan will watch but only in order to tick it off of their list rather than a yearning to see Bobby Darin as a lead man.
Gunfight at Black Horse Canyon (1961)
Whilst out trying to capture a wild stallion Jim Hardie (Dale Robertson - Dakota Incident) becomes aware that someone has placed a bounty on his head and it doesn't take him long to discover that man is Squire (Philip Carey) who 10 ...
The Gunfight at Dodge City (1959)
After killing a man in self defence Bat Masterson (Joel McCrea - Ride the High Country) is forced to leave Hay's City and head to Dodge City to visit his brother Ed (Harry Lauter) who is not only the City Marshal but also standing f ...
Ballad of a Gunfighter (1964)
Saloon owner McCord (Robert Barron) and his band of outlaws are all set up to rob a stagecoach but are beaten to the hit by a masked man in black riding a white horse. That man is Marty (Marty Robbins) who rather than keeping the mo ...
Death of a Gunfighter (1969)
Times have changed in Cottonwood Springs once a town full of bad elements but now a prospering place with a train line, electricity and even a motor vehicle, all of which is thanks to Marshal Frank Patch who over the years has rid t ...
Invitation to a Gunfighter (1964)
That brings me to "Invitation to a Gunfighter" a 1964 western which amongst the cliches it uses it has Matt Weaver a civil war soldier returning to town to discover his home and land have been sold, the woman he loves has married so ...
End of the World (2013)


text:
Tank Repair
Shop Fabrication
Mechanical Piping
ASME Pressure Vessels
Water Storage & Wastewater
Home / News / Blog
Home / News Blog / Article
Field Erected Storage Tanks - FAQs
AUTHOR T Bailey, Inc.
CATEGORY Field Erected Tanks, FAQs
As steel fabricators of industrial storage tanks, we at T BAILEY INC. hear a lot of field-erected tanks frequently asked questions. So to help our potential customers and readers on Google find the answers they're looking for, we've compiled this list of FAQs, with answers given by some of the leading experts in our fab shop.
1. How Large Can a Field-Erected Tank Be?
The codes and standards that regulate field-erected tank construction have nothing to say about maximum tank size. So, in theory, as long as the requirements set by API 650 or AWWA D100 are being followed, the sky is the limit!
In practice, however, there is a capacity limit at which it becomes more affordable to build multiple tanks instead of one large one. This is why tank farms are typically chosen over the construction of a single, massive reservoir.
But, for the sake of argument, how large can a single tank be? Here at T BAILEY INC., our fabrication experts have built massive reservoirs over 184' in diameter and with capacities hitting 10 million gallons.
2. How to Determine If I Need a Shop-Built or Field-Erected Tank?
Shop-built and field-erected tanks each serve the same purpose — to store product. The difference is that one is fabricated and assembled in the shop and then shipped to the job site as a turn-key product, while the other is constructed at the job site.
Each kind of tank can get the job done, so economic factors are usually what determine which style of tank you select.
For example, while pressure vessels can be built on-site, it's usually cheaper to get them built in the shop.
Another factor that influences this decision is site access. For instance, if your job site can only be accessed by truck and you need a 30' diameter tank, then you'll need a field-erected tank, as the largest tanks that can be trucked are 12' in diameter.
3. What Kind of Site Work is Required Before Building a Field-Erected Tank?
The site preparation for field-erected tank construction is similar to building any other structure, like a house or office building. Site work we do includes:
Clearing trees & removing stumps
Demolishing old buildings or existing tanks that occupy the site
Excavating & pouring foundation
Piping & utility installation
Installing security
Building pump house
As a general contractor, T BAILEY INC. handles every step of the field-erected tank construction process, including all the site preparation.
4. What Are the Site Limitations? When Can You Not Build a Tank?
Access is the primary factor that determines whether or not you can build a field-erected tank.
For example, we only construct field tanks if the job site is accessible to a tractor-trailer rig. This limitation is put in place because we need to ship all the steel parts and equipment to the job site via tractor-trailer.
Another limitation is that all sides of the tank must be accessible by crane. This can prevent us from building medium-sized tanks in tight sites, as there may not be room to position our crane on the outside of the tank. The alternative is to cut a door sheet and put the crane inside, but medium tanks are typically too small for this. We can, however, reach the far side of smaller tanks with crane access from only one side.
5. What's the Lifespan of a Field-Erected Tank?
There are tanks that are celebrated by the Steel Tank Institute for lasting over 100 years.
Water tanks are especially adept at lasting for 50-100 years, as they have interior and exterior coatings that preserve them better than uncoated tanks. So your AWWA D100 water tank should last as long as you maintain coatings.
As for oil tanks, it's not uncommon to have API 650 tanks that last 50+ years (so long as proper inspection cycles are maintained).
Two techniques to help you extend the longevity of your tank include:
Cathodic Protection; placing cathodes and anodes inside the tank helps slow down corrosion and can stop the bottom plates of a tank from corroding from the outside in.
El Segundo Bottoms; a specialized procedure that replaces the bottom section of a corroded oil tank. Mitigates the cost of building a new tank.
6. What Kind of Material Can a Field-Erected Tank be Constructed From?
Field-erected tanks are usually built from either steel or concrete. Here at T BAILEY INC., we only fabricate steel tanks (carbon steel or stainless steel).
While concrete tanks may seem like a cheaper alternative to steel tanks, the reality is that leaks, cracks, and bacterial growth make concrete a risky option.
Steel tanks are more durable, able to withstand decades of service in harsh conditions without compromising the quality of the stored product. And this is why concrete tanks have a maximum lifespan of 60 years, while steel tanks are still standing 100 years later.
A Trusted Tank Fabricator Near You
T BAILEY INC. has been building steel tanks since 1991, giving us the experience and proven track record necessary to confidently take on any kind of field-erected tank project. If you have more questions about field-erected tanks, browse our blog, or contact our fab shop today to get your tank project started.
Special Announcements, Field Erected Tanks, Steel Tank Fabrication, Innovation
The Vertomatic: An Innovation in Steel Tank Fabrication Increased Productivity and Cut Costs
In today's world, innovation and technical capability have become survival mechanisms – this is also true for steel tank fabricators. Innovation is often the answer to the unique challenges that arise when constructing large field erected tanks.
Field Erected Tanks, El Segundo Bottom
Is An El Segundo Bottom the Answer to Your Leaky Steel Tank?
You've just received your API 653 inspection report and are faced with the hard reality that your aboveground steel tank (AST) has a leaking bottom. What do you do now? How do you stop the leaking and ensure it won't haunt you later down the road? How much will th …
Special Announcements, Metal Fabrication, Field Erected Tanks, Metal Construction
T Bailey, Inc. Announces New Resource on Steel Tank Construction and Fabrication
T Bailey, Inc. is excited to announce the launch of a new resource on metal fabrication and construction. Led by their decades of experience in metal fabrication and …
12441 Bartholomew Rd Anacortes, WA 98221
QUALITY CONTROL CERTIFICATIONS


As new bike season approaches full swing, सवारी को TWMX परीक्षण कर्मचारी गरेको नवीनतम दिन बिताएको थियो 2005 KTM two-stroke lineup. In a world that now seems dominated by thumpers, after spending a full afternoon roosting around Perris Raceway we're here to say that two-strokes ain't dead just yet!
Another cool feature of the 2005 models is that both bikes come stock with an adjustable-offset, aluminum triple clamp. What was once a popular aftermarket item is now standard equipment, र 2005 KTM riders have the luxury of choosing from either an 18mm offset or a 20mm offset, depending on whether they want tighter steering control or better stability at speeds. Trick.
If you think that just because there were substantial chassis changes made to the SX machines that the Austrian engineers slept on the powerplants, you're dead wrong! Bigger crankshaft diameters, dual piston rings, a new cylinder and different carburetor settings all add up to make the '05 250SX faster than ever. को 125 didn't get quite as many modifications to its motor, but if you know anything about the little orange rocket, you probably already know that it didn't need it!
Plenty of minor detail changes also abound in the 2005 SX collection, the most important being the addition of a stock front fender brace. Riders will no longer complain of the stock front fender slapping against the wheel during hard hits—को '05 is as solid as a rock! New shrouds are also found on the 2005, as are vibration reducing, dual compound grips mounted to stock 1 1/8 aluminum handlebars.
Well, enough of the technical update crap, let's get to it… On the track, both bikes showed tremendous improvement over last year's models. Better handling was the name of the game this year, and the new frame is definitely a welcomed change. दुवै 125 र 250 entered and exited corners and rough, whooped-out sections like they never have before.
Our test guru Rich Taylor summed it up best by saying, "In the past, the KTMs have been so fast, motor-wise, that the chassis couldn't keep up with them. यो वर्ष, with the improved stiffness and rigidity, I can really take advantage of the bike's strong powerplant.
Want to see the KTM 125 एसएएक्स र 250 SX in action? Click the video links on the upper right. To view the videos, you'll need Quicktime 6.x, which works for both Mac and PC, is available as a free download at www.apple.com/quicktime/download.
मोटरसाइकिल विनिर्देशों सूची को, तस्वीर, मूल्यांकन, समीक्षा र discusssions मोटरसाइकल बारेमा.


text:
Authors
=======

- Tetsuya Morimoto
- Christian Neumann
- Marco Scheidhuber
- Andreas Kaiser

For a complete list of contributors, see
https://github.com/Kotti/kotti_contactform/graphs/contributors


This was my second chance to test out a pair of 361° trainers. Previously, I tested out the neutral Spire 3 and really enjoyed the fit and function. This time around, I got to slip into a shoe designed to add a bit more structure and stability. Full disclosure, I have a neutral foot, so I was a little skeptical to try a stiffer, more stable trainer. However, I found these comfortable, well-designed and with enough flexibility they work well with a variety of biomechanical foot types. These arrived the day before I was scheduled to do a longer run around a 5k loop. The route was a mix of dirt track and road, a perfect combination for this type of trainer. So, I decided I'd take them on the first or second loop and then switch to the pair of Spire 3's that I've been wearing previously. Six loops later and I was still rocking the Strata 3. A pleasant and welcome surprise on an out-of-the-box first run. The Strata 3 is a comfortable and smooth ride and I find myself excited and intrigued by 361° and their line of trainers.
A similar fit as the Spire 3, the Strata 3 would accommodate a varied range of foot shapes. The toe box is spacious with a seamless and supple forefoot, with a pressure-free tongue design which allows for a snug midfoot fit. The MORPHIT lacing system (which is a multi-dimensional lacing design) hugs the midfoot comfortably, allowing for a form-fitted midfoot which didn't require me to uncomfortable tighten the laces. The heel cup is soft with a medium depth, which allowed me to securely "lock in" without having to pull the laces so tight. Overall, it is just a comfortable out-of-the-box fit.
You may find this weird, but one thing that stuck with me for the Strata 3 were the laces. Over the years companies have tried to revolutionize the lacing system. Often this results in complicated Kevlar pull chords, turn-dial tighteners, round laces or something so weird I wouldn't know how to work it. I am always surprised no matter how advanced the technology is, they loosen, untie or even break. I generally replace them with classic flat laces, so I was glad to see these shoes come with classic flat laces that stay snug and complement the MORPHIT midfoot design.
I am a big fan of the midsole QU!CKFOAM technology developed by 361°. It is a unique feel that I haven't found in other shoes. The QU!CKFOAM midsole provides that comfort and cushioning one would want on a harder surface without losing the energy on the push off. There's obviously been a push towards minimalist and maximalist shoes in recent years. Most of the time, the maximalist shoes are too soft and make you feel like you waste a lot of energy, while the minimalist shoes give you that response, but fail in providing the support and cushion you buy a shoe for. The QU!CKFOAM technology of the Strata 3 (and the 361° line) provides the perfect balance between the comfort of a maximalist shoe with the response of a minimalist shoe.
The medial support of the Strata 3 in the form of a EVA arch adds a bit of stiffness to the midfoot torque, and along with a flexible and durable outsole, it helps guide the foot in a natural motion. A great feature for someone with mild to moderate overpronation.
I really have been enjoying the 361° trainers. Overall, the Strata 3 fit well, performed well on a variety of terrains, and provided a smooth ride. I wasn't familiar with them several months ago, but after my second pair, they have become a great trainer for my runs around town. I look forward to putting in some more miles on my Strata 3 and look forward to seeing what 361° comes up with next.
• Lightweight and seamless double jacquard mesh for maximum ventilation and comfort.
• MORPHIT lacing system – a multi-dimensional lacing design that comfortably harnesses the foot securely during dynamic movement.
• Medial EVA arch sidewalls help to slow the rate of pronation and provides midfoot support.
• Full length QU!KFOAM for springy responsiveness.
• External QU!K spine (TPU shank) for dynamic stability.
• FITZ-RITE midfoot interior utilizes a distinct pattern to support the foot medially and laterally.
• QU!K flex forefoot engineering provides for natural and balanced toe off while enhancing ground contact for better acceleration.
For full product information see HERE.