text:
Modern materials putting the ax to wood in sports
By Richard L. Wentworth
The crack of a Little League baseball bat today is more likely a dull clang. Four out of five bats in Little League are now aluminum, says Tim Hughes, director of public relations at Little League national headquarters in Williamsport, Pa.
Indeed, outside the major leagues, aluminum bats have become the norm and those made of wood the exception.
''There's no question about the reason: the economics,'' says Lee Eilbracht, executive director of the American Baseball Coaches Association in Champaign, Ill. Aluminum bats don't break as often as wooden bats, outlasting them ''10 or 20 to 1,'' he says, which is why they have been generally accepted in the past seven or eight years.
And the trend away from wood has not been limited to baseball.
In the decades since World War II, wood sporting goods have been increasingly harder to find, a fact that has been noted but not studied, says Thomas B. Doyle , director of information and research at the National Sporting Goods Association in Mount Prospect, Ill.
''There aren't a lot of [sporting goods] being made of wood any more. There is less and less wood.''
The exception appears to be at the professional level in sports, where there is still a strong preference for wood. To some extent this may be due to tradition, but some officials say the main reason is that wood is still better than anything else.
Bill Murray, administrative officer at the Baseball Commissioner's office in New York, says studies have shown that aluminum bats extend the distance a ball is hit, and that if aluminum bats were allowed at the major-league level, it would affect the record standings of players. So American and National League batters are required to stick to wooden bats.
In hockey, ''players find they get the greatest performance from sticks made of wood,'' says Gary Meagher, assistant director of information at the National Hockey League headquarters in Montreal. One manufacturer adds that this is because players prefer the strength and response of wood.
But outside professional sports, wood has been edged out in favor of various new substances, as manufacturers of sporting goods over the years have taken advantage of advances in the aerospace and petrochemical industries.
Today fiberglass is widely used for snow skis, fishing rods, and canoes. There are high-strength glass basketball backboards, ping-pong tables made of composite board, polyurethane skateboards, bows and arrows of high-strength metal, backpacks with aluminum frames, and steel tent pegs.
A decrease in experienced woodworkers and the high labor costs of woodworking have been important factors in the shift away from wood.
High-quality wood is ''a more costly resource'' than the modern alternatives, says Sebastian DiCasoli, director of marketing for the Sporting Goods Manufacturers Association in North Palm Beach, Fla. It has become hard to sell wood at a profit, he says.
Other reasons for wood's lower profile are that sporting goods made from metals and plastics are, as a general rule, easier to shape, cheaper to make, lighter in weight, and better able to withstand the stress of play than their wooden counterparts.
Tennis rackets, for example, come in aluminum these days. Another wood substitute in racket handles is composite board.
Composite board is made by passing fiber, which looks like yarn, through a bath of epoxy. The fiber then ''cures,'' or hardens. (Three commonly used fibers are graphite, boron, and fiberglass.)
To make a tennis handle, a mold is placed around the board. Pressure applied from the inside makes the board into a tube. When this process is completed, the racket handle can then be finished and painted.
Graphite is gaining prominence. Products made from it are prestigious - and expensive. Manufacturers and players say that a graphite tennis racket, golf club, or fishing rod is durable, elastic, lightweight, and stronger than wood.
But graphite sporting goods are also a boon to manufacturers. They are more profitable than wood, Mr. DiCasoli says, and graphite's esoteric quality makes it easy to market in a highly competitive field.
Louisville Slugger to be sold to Wilson Sporting Goods for $70 million
A lifelong gift from the grand shaman
Baseball books that hit it out of the park


text:
C'est magnifique! Gold Coast's French Chateau a Nod to Versailles
By Tammy Scileppi Posted on April 2, 2019
Louis XIV would have loved this splendide French chateau set on eight magnificent acres in Brookville. Asking price? $15,000,000.
A rare jewel, Haut Bois (or "high wood") was inspired by the king's hunting lodge, which was to become the Palace of Versailles. And its exquisite formal gardens — modeled after the spectacular gardens at Versailles — were conceived by prominent Parisian landscape designer, Jacques Gréber.
"The home has an impressive provenance and has made an appearance in numerous books which detail the fabulous, grand estates dotted along the North Shore's Gold Coast," notes John Messina of Daniel Gale Sotheby's International Realty. "Although grand and formal, the house is still warm and inviting. All the main rooms have French windows and doors which are perfectly situated to face south for the very best light, and they overlook the picturesque gardens."
Designed by renowned architect Ogden Codman Jr. in 1916, Haut Bois was built for Walter Effingham Maynard, a real estate tycoon.
During the Roaring Twenties, Jay Gatsby may have been one of the elite guests at the numerous parties the residents of Haut Bois were known for hosting. Famed author Edith Wharton spent summers there with her dear friend Ogden Codman, who co-wrote The Decoration of Houses, still studied by design students today.
Countless photo shoots have captured the estate's splendor. It has been beautifully restored to its former glory by master artisans and decorators who specialize in 17th century French architecture and design, to ensure that the restoration stayed true to the home's origins.
"The original Rouge Languedoc marble, mined more than 100 years ago from a French quarry, was found in Italy and used to restore the entry foyer and one of the hallways. To guide this extensive renovation, the homeowners used photos and pictures from the archives at the Society for the Preservation of Long Island Antiquities and from Wharton's own Massachusetts home, The Mount, which was also designed by Codman [and Wharton] and is today a national historic landmark," Messina explains.
Modern-day renovations include new heating, electrical, sound, security, building management, air conditioning, septic, well, and irrigation systems. Also, the roof, elevator, and all the windows and doors were replaced.
"Equipped with a tennis court, pool, pool house, children's playhouses, a reflecting pond, fountains, a golf green, exercise and billiard rooms, and a theater, the home also offers an outdoor kitchen and built-in fireplace, ideal for al fresco entertaining on cooler nights," says Messina.
"Activities such as horse riding, fishing, yachting, golf, swimming, skeet shooting and winter sports, such as skating and hockey, are held at neighboring clubs."
Haut Bois is one of the few great estates still held by private owners. The opulent, 18-room mansion is in diamond condition, boasting seven bedrooms and nine bathrooms, formal living and dining rooms, breakfast and family areas, an eat-in kitchen, a finished basement and attached garage. Special features: six fireplaces, wine cellar, and more.
This residence is an easy 26-mile commute to Manhattan and conveniently located just minutes away from the Long Island Expressway. Nearby, superb dining options abound, as well as designer shopping at Americana Manhasset.
"The current owners are both successful, second-generation civil litigators who grew up in Manhasset and chose to return to the Gold Coast to raise their three children. They remained happy in the home for 20 years and are ready to enjoy the next phase of their lives," Messina says, noting that previous owners include Irving Stitsky, the notorious partner at Stratton Oakmont, who was depicted in Boiler Room and The Wolf of Wall Street. Patrice Munsel, the youngest singer to ever star at the Metropolitan Opera, also lived there; she would often open the French windows overlooking the gardens and sing to the neighborhood children while they played on the grounds.
"Anyone who enjoys the finer things in life would be happy living at Haut Bois," says Messina. "With New York City so close by, you have everything here that life has to offer."
Contact: John Messina, Licensed Associate Real Estate Broker, GRI, SRES – Daniel Gale Sotheby's International Realty, Cold Spring Harbor Cell: 516-241-0761

redpajama_set_name: RedPajamaCommonCrawl


If you enjoy making necklaces, earrings, bracelets and other fun things with Beads, The Bead Farm is the perfect place for you!
A big problem for those of us with younger kids when making beaded jewelry, is the mess that it makes, and the hazard for our kids to put small beads in their mouth. At The Bead Farm, do all of the work there so you don't have to stress!
Join their mailing list for updates on when classes are held. You can also follow them on Facebook.


text:
Don't call Beach House's sound "dreamy": "It's gotten to be like saying somebody's nice"
Victoria Legrand talks to Salon about their new album "Depression Cherry"
By Mack Hayden
Published August 31, 2015 10:58PM (EDT)
(Shawn Brackbill)
The first song on the new Beach House record "Depression Cherry" is called "Levitation," and it's an apt description of the band's sound and vibe. The interplay of echoing organs and guitars mixed with Victoria Legrand's oracular voice lifts you off the ground just far enough to still be aware of your surroundings, but taken aback by how different the view now is. Don't let that fool you into thinking Beach House is all airy, dreamy aimlessness, though. Theirs is a career of solid, original output within the framework of a specific aesthetic, and the new record bears signs of both restraint and progress. Alex Scally and Victoria Legrand seem to know who they are but, even more important, they're willing to continually probe the depths of what that means, personally and musically.
We talked with Legrand about "Depression Cherry," who Beach House is and who they're becoming.
One thing I see over and over from music critics in regard to your music is how "dreamy" it is. But do you view creating music as a method by which you can escape into a dream, or by which you can deepen your sense of reality and wakefulness?
I think it's more the second thing you said. The "dreamy" word is so lame. It's gotten to be like saying somebody's nice, it's such an easy adjective to describe something. Granted, yeah, it has that effect on people. But it's gotten to the point where it just seems like lazy journalism to say that. When Alex and I are writing, it's a lot about feeling and we play a lot of the music when we're writing. It's very physical in certain ways, there's a violence to things. It's definitely, for me, way more than just dreamy. I don't necessarily feel like it's escaping either. I feel like it's doing what we're all doing, dealing with reality in certain ways. But what is reality? It's different for everyone.
Given the title of the new record is "Depression Cherry," was there any hope the music would help alleviate feelings of depression in those who suffer from it?
I think you can decide for yourself, because I can't. I think having the word "depression" in the title and the word "cherry" is many things. It can be confrontational, it can be completely artistic, it's utterly unique in many ways. It's whatever you want it to be. I don't think it's my place to decide what your response should be. That's music — it affects everyone differently. You should give yourself that freedom to feel however it makes you feel. Granted, we made the music. But ultimately, how it makes you feel is something we may not have been able to predict at all.
Music's kind of the gift that keeps on giving. It's always taking new shapes and forms and meanings over the years. So give yourself that freedom to just have it for yourself for a while. It'll mean new things to you, or maybe it won't.
Your sound is obviously unique to you guys and identifiable, yet you keep finding new things to do with it, tweaking it and evolving. So how do you go about achieving cohesion without ending up with repetition?
That's the kind of thing where when we're doing it, we're not thinking about what's happening. It's in the doing of it and in the constant work of it. There's newness to be found for something without wishing for it or hoping that it happens. For me, there'll be months where I don't think of a new song or melody but then it happens one day. It's not something that you can control but we've now written so many songs that we're deeply in the matter. It's surrounding us, there are so many songs in our minds that we're just swimming in it and we're liking certain things and not liking other things. I think the things we grab on to and develop may be the result of having a lot of material and we can just go deeply, deeply in. That's as about as intellectual as I can get with it.
We're very inspired by the instruments we play and, because we work so often together and we've worked so many years together, I think there's a fluidity to the things we get fascinated by. The melodies and the chords we get inspired by, we can chase them so quickly together. I could see how if it was a band of five people and we were living all over the world, it would be difficult to chase those ideas. But because it's the two of us, there's a concentration to it. I think we're really lucky in many ways to have found each other and to go deeply into an idea without hesitation. That has something to do with it too.
Within that collaborative process between you two, has there ever been a point at which the vision started diverging and shifting, one person playing catch-up or trying to pull the other person back? Or has it been pretty unified throughout your time as a band?
I think it's all those things you said. Nothing good comes without conflict. Tension is good. If one is pushing in one direction and the other is hesitant, the hesitant one won't be convinced unless they really believe that idea is good. There are layers upon layers of intuition and feeling going on. We don't talk a lot when we're working. There are moments of "Does this work? Does this not work? I really like this."
We really just try to let the music speak for itself so it's a bit of everything. It's not like we sit down and it's perfect immediately. The most perfect moment is when the first idea comes out but there are many other great, perfect moments. I shouldn't even use the word "perfection". But it's basically the moment that excites you and you're always chasing it and trying to preserve it. That can be a very painful process. Some of the songs come together very quickly, some of them take months, some of them take years. I wish there was a word to describe the process. It's like a crazy spider web of things that click and things that fall apart. Alex and I are catching things and bouncing them off each other. Some things work and some things don't.
Are there ways in which creating a song can almost feel like an existential choice? You start out with all these possibilities and you've got to hone it down to being just one thing. How do you decide when the song is exactly what it has to be?
There's a moment that happens. It's just a feeling that things are bright and it can't go anywhere else. It's gone to the places it needs to go. That initial feeling is still intact in there too. So yeah, it's sort of existential but it's also kind of mystical as well. You're using your intense, intuitive ability and your instinct and you're feeling that it's finished. It's sort of the same way a sculptor looks at a form and says all the forms are just right in their inconsistencies. My intentions and the things that happened, which were these beautiful accidents I couldn't have predicted, there's a big combination of things that can happen. But there's definitely a moment where you just have to let it go. That's the big, ultimate risk, as a songwriter: you go as far as you can but then, for your own sake even, you have to let it go and know it's finished. It's a huge feeling of relief sometimes. In the past, we've had some songs where it was such a struggle to finish them. It becomes very troubling, actually. It feels like you've failed something and just didn't get it. You're in the moment and you try so many things until it feels like a song.
With the stuff I've been reading about this new record, it seems like you intended this to be simultaneously a return to simplicity while also a being a bit more loud and aggressive [to better match bigger venues]. When it came to learning that new vocabulary of both returning to an older style of songwriting and reinventing it in a more visceral way, what made that something you wanted to do and something you knew was doable?
I think, in our evolution, which keeps happening, we're always doing things at least slightly different. Even when people say all the songs sound the same, I always think "No, they don't. They don't sound the same." If we'd come out with a rap album, everyone would say we'd really changed our sound. But, for us, the rules don't apply there.
"Bloom" was kind of the peak of our exploration of what live drums could do in our arrangements. We went pretty far into it. It's definitely our drum record. There are a lot of cymbals and drums in that album. After playing so many songs live, we had "Teen Dream" songs, "Devotion" songs, first album songs, but the "Bloom" songs had this certain feeling. We ended up feeling like we went there and we wanted to peel a little bit back in the other direction to see what happens.
That's not the only reason "Depression Cherry" happened. One of the things in "Depression Cherry" is that we've harnessed the drums again in a way that's reminiscent of "Devotion" or even "Teen Dream." We turned slightly in another direction. It freed up a lot of space for the vocals and for the music to thrive. I think drums can really crunch things down. They're a very competitive sound. Singers always over-sing on stage because the drummer is so loud. Drums, for us, are good in moderation.
It was just another step of evolving. We did a lot of new things with this record. We had a choir. I think Alex's guitar is doing a lot of new things that it hasn't done in the past. There's a whole variety of things that happen on this album that haven't happened on the others. It's not just about bigger venues, it's a combination of many things.
We wanted to take a break. We got back in 2013 and I didn't even want to think about music. I just wanted to see what would happen. Some bands may take five or ten years as a break so, comparatively, ours was not that long. But then "Depression Cherry" occurred. We really didn't want to force it and we wanted to do it on our terms. We just wanted to fully let the songs be what they needed to be. The result was this record.
How do you think "Depression Cherry" stands out from your other records?
I don't think it could've happened any sooner. It couldn't have happened without "Bloom," "Bloom" couldn't have happened without "Teen Dream," "Teen Dream" couldn't have happened without "Devotion" and "Devotion" couldn't have happened without the first record. They're all indebted to each other in certain ways. They owe their existences to the previous work, not just in the sense of their being the follow-up. After four or five records, you have an amalgamation of work and a pool of songs. I think "Depression Cherry" is exactly where it should be.
On the press release for the record, there's a Schopenhauer quote about loss proving the worth of things. Do you feel like that's proven to be true for you as a band in any way? How did other people's ideas influence the writing of this record?
I think loss happens constantly on a giant scale, from the very small instances where you hardly even notice it to the very giant traumas like losing a loved one. The reality is we lose something everyday. We lose that day and we never have it again. That's a whole philosophical world. I don't think we were thinking about it that intensely while we were writing. There were some quotations, after we were finished and had time to reflect on the album, that seemed to fit.
Alex is a very avid reader. I don't read a lot, maybe because I write words a lot. Those quotations were like echoes of what we were thinking or feeling. Particularly, for me and Alex, the Banana Yoshimoto book "Kitchen" had a lot of effortlessness and playfulness in its dark matter that really resonated with us. It felt very natural how she was tackling these larger things we all think about as humans.
The record isn't all about loss or the passage of time, it's many things combined. I have not personally lost someone in that dramatic sense of the word. But, as people, we've experienced our own traumas and things. I think all humans understand what that is. A lot of music deals with that constantly. It's the essential longing for what was and what will be. It's an interesting conversation. We wanted to get people to think and to wonder.
Mack Hayden
MORE FROM Mack Hayden
Alex Scally Beach House Depression Cherry Music Victoria Legrand


With the headline 'Mogul Wilson backing UK rap band', BBC News profiles the fourth incarnation of Factory, F4 Records.
Tony Wilson explains that Factory Too and Factory Records Limited, the two previous incarnations, were "despondent and dismal experiences" and that "Of all the things I do in my life the most exciting thing I've ever done, and the thing I have most loved, is being part of a record company."
Meanwhile, F4 has taken delivery of some shiny new badges, more details of which expected shortly.


text:
College students are filling in as substitute teachers.
On a colorful rug inside a classroom at Mount Eagle Elementary, a group of students sit quietly in a circle around Mr. Consolla as he reads aloud from a book. The students are attentive and hanging on to his every word as he finishes the chapter.
"All right it's time for recess!" he says. "It's not too cold outside but you might want a jacket."
Mr. Consolla helps the students get their coats and line up by the door. The smooth transition to the playground appears to be the work of a seasoned professional teacher. But Mr. Consolla is actually a college student making some extra money as a substitute teacher for FCPS.
"It can be a little intimidating at first. You're the only adult in the classroom and you have to learn to command the room."
— Julian Lawson Consolla
Julian Lawson Consolla is a junior at the University of Louisville in Kentucky. Like many college students, he returns home for winter break and has several weeks with a wide open schedule. His mom, Jean Consolla, who is also the principal of Mount Eagle, encouraged him to apply to be a substitute teacher. He was drawn to the flexible schedule and good pay, which ranges from $17.79 to $23.91 an hour, depending on level of commitment.
"The hours here are 8 a.m. to 3:30 p.m.," Julian says. "After about 3:45, I'm done for the day and I can relax. And I get weekends off. The schedule is similar to college. So for me, it works well."
As the son of a principal, Julian was already familiar with his mom's school and has always enjoyed working with kids. For him, it was an easy decision to apply. But he knows other college students may not be as comfortable working with young children. Still, he encourages everyone to give it a try.
"It can be a little intimidating at first," Julian said. "You're the only adult in the classroom and you have to learn to command the room. But you quickly realize, even though you're new, the students respect you. The teachers leave notes about how to get the students' attention. I have a little bell I can ring. And once you learn their names it's much easier to communicate with them."
Principal Jean Consolla says it's the perfect opportunity for college students. Her school is struggling to find subs, as are all FCPS schools. This job opportunity helps college students make good money on their own schedule, while also alleviating the substitute teacher shortage.
"My son is calculating how he can make over $1,000 in 11 days, and still have time to see friends at night and on the weekends," Principal Consolla said. "It's a win-win for us."
Julian is continuing to sub until he goes back to Kentucky in mid-January. He also plans to sub after he is finished with finals in May (the last day of school for FCPS is June 10). Spring break is also a great time for college students to make some extra cash. For college students who live in the area full-time, subbing is an excellent part time job. Students can decide the days they want to work, and even do half days.
The application process usually takes one to two weeks to complete. It requires a background check, a tuberculosis test, and a training session. College students must have at least 30 credits to be a substitute at FCPS.
FCPS is holding a Substitute Interview Day on January 18 from 9 a.m. to 11 a.m. Learn more and register. https://app.brazenconnect.com/a/FCPS/e/Le1vjTD
Learn more about the application process and requirements.
https://www.fcps.edu/careers/career-opportunities/substitute-teaching-opportunities/new-applicants
See Substitute Pay Schedule for the 2021-22 school year.
https://www.fcps.edu/sites/default/files/media/pdf/FY22-substitute-and-homebound-rates.pdf
Parks = Innovation
Reconsidering Marijuana
New Governor Revokes Mask Mandate for Schools
FCPS Superintendent Releases FY 2023 Proposed Budget
Column: A New Day in Richmond and Many Challenges
Tweets by @mtvernongazette


Congrats to all the devs involved in this release!
omg, am i dreaming ?
But this is a running problem, not an installation problem. Just unpacking the prebuilt client and trying to run it. I find mainly other people on Arch having similar problems so maybe it's not relevant. It's been passed up to dev anyway.
Oh, very nice dev's !!
a new era has begun, whether it will possess the same innovation of the 1.1 era is yet to be seen.
i am hopeful that the new diversity of weapon choices will encourage a stronger meta that encourages innovation and excitement.
1. A few of us are having trouble running the linux server binaries. I couldn't get the 64-bit version running (yes, I have a 64-bit machine) while XRD couldn't get the 32-bit version running. In both our cases we got a "file or folder does not exist" message when trying to run the binary (really weird stuff).
2. It appears the models for ladders are missing client-side.
(10 Oct 13, 06:50AM)Zarjio Wrote: 2. It appears the models for ladders are missing client-side.
Regarding Linux installs. Please note, there are *THREE* available libcurl libraries. The binaries were compiled with "libcurl4-openssl-dev".
Note, how it is version 4 of libcurl, and also that it is the openssl version.
* What version edition of libcurl you're using (i.e. should I use the NSS flavour, or gnutils flavour, instead of openssl... my expectation is 'no').
I had problems with older maps cfg because some stuff is now in folder "makke" and in 1.1 it was in root. So all older maps cfgs need to be manually adjusted.
After a long time, it finally arrived.
Hope it become better and better.
Indeed, older maps aren't compatible with v1.2 so you can either auto-download it straight ingame from AKIMBO (type /getmap mapname) or, if the map isn't yet in our vault you can also (no need to do it manually) use the v1.2 cfg converter.
is it just me or does /addOnLoadAlways fog 1024 not work? and /onKill wont work?
considering that you worked for free in the spare time, you did a great job.
STAY TUNED FOR A LETS PLAY!
thanks. And I mean it.
Current time: 22 Apr 19, 08:16PM Powered By MyBB, © 2002-2019 MyBB Group.


Priced below KBB Fair Purchase Price! $4,000 off MSRP! 19/26 City/Highway MPG Kia of Clarksville is very proud to offer this handsome-looking 2019 Kia Sorento EX in Snow White Pearl. Well equipped with: 3.32 Axle Ratio, 3rd row seats: split-bench, 4-Wheel Disc Brakes, 6 Speakers, ABS brakes, Air Conditioning, Alloy wheels, AM/FM radio: SiriusXM, Auto-dimming Rear-View mirror, Automatic temperature control, Blind spot sensor: Blind Spot Collision Warning warning, Brake assist, Bumpers: body-color, Cargo Net (Floor), Carpeted Floor Mats (7-Passenger), Delay-off headlights, Distance pacing cruise control: Smart Cruise Control (SCC), Driver door bin, Driver vanity mirror, Dual front impact airbags, Dual front side impact airbags, Electronic Stability Control, Emergency communication system, Exterior Parking Camera Rear, Four wheel independent suspension, Front anti-roll bar, Front Bucket Seats, Front Center Armrest, Front dual zone A/C, Front fog lights, Front reading lights, Fully automatic headlights, Garage door transmitter: HomeLink, Heated door mirrors, Heated Front Bucket Seats, Heated front seats, Illuminated entry, Leather Seat Trim, Leather steering wheel, Low tire pressure warning, Occupant sensing airbag, Outside temperature display, Overhead airbag, Overhead console, Panic alarm, Passenger door bin, Passenger vanity mirror, Power door mirrors, Power driver seat, Power Liftgate, Power passenger seat, Power steering, Power windows, Radio data system, Radio: UVO eServices, Rear air conditioning, Rear anti-roll bar, Rear Parking Sensors, Rear seat center armrest, Rear window defroster, Rear window wiper, Remote keyless entry, Roof rack: rails only, Security system, Speed control, Speed-sensing steering, Split folding rear seat, Spoiler, Steering wheel mounted audio controls, Tachometer, Telescoping steering wheel, Tilt steering wheel, Traction control, Trip computer, Turn signal indicator mirrors, Variably intermittent wipers, and Wheel Locks.


text:
Farella Braun + Martel Wins Important Victory for Businesses Prosecuting False Advertising Claims
April 16, 2010 Announcement
Companies May Defend Their Business Against Competitors' False Advertising Without Being Subjected to Anti-SLAPP Motions
SAN FRANCISCO, April 16, 2010 - Farella Braun +Martel secured, in an appellate decision certified for publication, an important victory for businesses that must prosecute false advertising claims against their competitors' and associated third-party organizations.
Dr. Bronner's Magic Soaps, the nation's leading liquid soap brand, filed a suit against some of its competitors, which are alleged to have falsely labeled their products as organic, and the trade association "Oasis," which is made up of some of the defendants in Dr. Bronner's suit. Oasis purports to certify (only its members') products as "Oasis Organic," pursuant to its own standard.
Oasis brought an anti-SLAPP motion, which the Dr. Bronner's team defeated in the trial court. Farella defeated it again in the First District Court of Appeals.
In a published opinion, released April 14, the First District largely accepted Farella's analysis of the proper application of the anti-SLAPP statute in the context of a trade association's promotional activities of its members' products, an issue not squarely addressed in any prior published opinions. In denying Oasis' anti-SLAPP motion, the Court of Appeals held that Oasis' certification only promotes the sale of Oasis-members' products and was not "true third-party endorsement or criticism, in the nature of consumer protection information"; nor did the certification contribute to the broader debate on the meaning of the term "organic."
The Court of Appeal's opinion affirms that companies may defend their business against false advertising from their competitors without being subjected to an anti-SLAPP motion, including an anti-SLAPP motion brought by a trade association or related third-party organization.
Attorneys representing Dr. Bronner's Magic Soaps are John Cooper of San Francisco's Farella Braun + Martel and Joseph Sandler of Washington D.C.'s Sandler Reiff & Young PC. John Cooper argued the appeal; assisting him on the brief was Farella Braun + Martel attorney Morgan Jackson.
More about Dr. Bronner's lawsuit and "organic" labeling of personal care products is available on Dr. Bronner's Web site at http://www.drbronner.com/usda_organic_body_care.html
Melinda Hepp / Traci Stuart
Blattel Communications
Farella Braun + Martel
How to Comply With the TCPA After the Facebook Supreme Court Decision
Many consumer products industry companies rely heavily on text messaging marketing programs to reach their customers and to create loyalty in an increasingly competitive market. While text messaging programs may be an effective marketing tool...
Kelly Matayoshi Recognized With 2021 Outstanding Barristers Award
Pandemic Restriction Challenges Face Uphill Battle in California
On Dec.16, 2020, in Midway Venture LLC v. County of San Diego, the San Diego Superior Court preliminarily enjoined enforcement of two COVID-19-related California public health restrictions as applied to two adult entertainment businesses...
Tony Schoenberg Appointed to Bar Association of San Francisco Board of Directors
The FASTER Act: What Companies Need To Know About the New Food Allergy Law
While the Food Allergy Safety, Treatment, Education, and Research Act (FASTER Act) only makes a minor change to add sesame as a major food allergen, it signals the government's intent to closely examine food...
Complying With the TCPA After the Facebook Supreme Court Decision
Many cannabis dispensaries rely heavily on text messaging marketing programs to reach their customers and to create loyalty in an increasingly competitive market. While text messaging programs may be an effective marketing tool, they...


text:
Q: KSH remove digits from number precision I am trying to compare 2 log files in a ksh script that look like
log1:
10100 951 5 20150318 20150430
10101 11950 0 20150323 20150630
10102 285933 1 20150128 20150430
10041 57007 3.53 20150128 20150430

log2
10100 951 5.0000 20150318 20150430
10101 11950 0.0000 20150323 20150630
10102 285933 1.0000 20150128 20150430
10041 57007 3.5300 20150128 20150430

Log1 on column 3 has maximum 2 digits after the . (eg: 3.53)
Log2 on colum 3 always has 4 digits after the . (eg: 0.0000 or 3.5300)
How could I add some digits after . for the first log or remove the digits in log2 in order to be able to compare them line for line?
My script is written in ksh.

A: You should format the value with printf:
cat log1 | while read col1 col2 col3 col4 col5; do
   printf "%d %d %.4f %d %d\n" ${col1} ${col2} ${col3} ${col4} ${col5}
done > log1.converted

Above code reads easy, but makes an unnecessary call to cat ("UUOC").
The better way to write this is
while read col1 col2 col3 col4 col5; do
    printf "%d %d %.4f %d %d\n" ${col1} ${col2} ${col3} ${col4} ${col5}
done < log1 > log1.converted

redpajama_set_name: RedPajamaStackExchange


text:
U+2020
======

A sample Android app which showcases advanced usage of Dagger among other open source libraries.

[Watch the corresponding talk][parleys] or [view the slides][slides].

The `ObjectGraph` is created in the `U2020App`'s `onCreate` method. The `Modules` class provides a
single method, `list`, which returns the list of module instances to use.

In order to add functionality in the 'debug' version of the app, this class is only present in the
`release/` and `debug/` build type folders. The 'release' version only includes the `U2020Module` while
the 'debug' version includes both `U2020Module` and `DebugU2020Module`, the latter of which is only
present in the `debug/` build type folder and is an override module.

Through the use of Dagger overrides, the 'debug' version of the app adds a slew of debugging
features to the app which are presented in the Debug Drawer™. The drawer is opened by a bezel
swipe from the right of the screen. From here you can change and view all of the developer options
of the application.

The drawer is provided by the simple interface `AppContainer`. This is an indirection that the
single activity uses to fetch its container into which it can place its content. The default
implementation returns the Android-provided content view. The 'debug' version overrides this with
`DebugAppContainer` which is responsible for creating the drawer, adding it to the activity, and
returning its content view group. It also injects all of the developer objects and binds them to
controls in the drawer.

The most notable feature the 'debug' version exposes is the concept of endpoints. Using the spinner
at the top of the drawer, you can change the endpoint to which the app communicates. We also expose
a false endpoint named "Mock Mode" which simulates an in-memory server inside the app. This "Mock
Mode" eases manual testing and also provides a static set of data to write instrumentation tests
against.

"Mock Mode" can be queried when modules are configuring their dependencies which is what allows
simulating the remote server in-memory.
```java
@Singleton class MockFoo() {
  @Inject MockFoo() {}
  // ...
}
```
```java
@Provides @Singleton Foo provideFoo(@IsMockMode boolean isMockMode, MockFoo mockFoo) {
  return isMockMode ? return mockFoo : new RealFoo();
}
```
See `DebugDataModule` and `DebugApiModule` to see this in action in the real app.

The mock implementations of these types are some of those injected into the `DebugAppContainer` for
binding in the drawer. This allows us to do things like control their fake network behavior and
alter their behavior.

In order to keep the shared state which represents the server-side data we use a `ServerDatabase`
singleton. At present this is only done with a combination of in-memory collections and images in
the `debug/assets/`. In a more complex app you could even use a full database. This class is
injected into each mock service which uses its methods to query and mutate state
(e.g., `MockGalleryService`).

![Debug drawer](u2020.gif)

Libraries
---------

 * Dagger - http://square.github.io/dagger
 * ButterKnife - http://jakewharton.github.io/butterknife
 * Retrofit - http://square.github.io/retrofit
 * Picasso - http://square.github.io/picasso
 * OkHttp - http://square.github.io/okhttp
 * RxJava - https://github.com/ReactiveX/RxJava
 * Timber - http://github.com/JakeWharton/timber
 * Madge - http://github.com/JakeWharton/madge
 * ProcessPhoenix - https://github.com/JakeWharton/ProcessPhoenix
 * Scalpel - http://github.com/JakeWharton/scalpel
 * LeakCanary - http://github.com/square/leakcanary

To Do
-----

 * Something with animations to showcase animation control.
 * Network errors probably crash the app.
 * Add another part of the app other than 'trending' so we can demo child graphs.

License
-------

    Copyright 2014 Jake Wharton

    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.

 [parleys]: http://parleys.com/play/529bde2ce4b0e619540cc3ae
 [slides]: https://speakerdeck.com/jakewharton/android-apps-with-dagger-devoxx-2013

redpajama_set_name: RedPajamaGithub


text:
Newspaper Pages
Auto P.R. Pages
Order Cargazing Pages
Refusing to Fit In
Posted on December 19, 2016 by Derek Price
Cargazing
By Derek Price
It's normal for people to go through an awkward phase when we struggle to fit in. For most of us, that ends around the same time acne does.
Subaru, though, has managed to build a car that seems to eternally stay in its formative years, never quite finding where it fits in the cliquish world of cars and crossovers.
For the most part, that's by design.
The Crosstrek is a vehicle with four doors and four wheels that stubbornly refuses to be pigeonholed into the familiar sedan, station wagon, hatchback, SUV or CUV categories. It shares some attributes with them all — the crossover-like ride height, the sedan-like traditional styling, the SUV-like traction at all four wheels, the hatchback-like sporty suspension response — but somehow manages to never fully meet the classic definition of any of them.
It's charting its own path.
Distinctive moldings around the Crosstrek's wheel arches help provide protection from scratches and dings during off-road driving.
Even its name has an adolescent awkwardness as it struggles to find its identity. Until recently, it was called the XV Crosstrek. Now it's just the Crosstrek, dropping the initials as if it doesn't want to be associated with the mysterious XV clan any more, for reasons only it understands.
You could call the Crosstrek a rebel, but rebellion implies an inner fire that this car never seems to ignite. Its 148-horsepower, four-cylinder engine and continuously variable transmission combine to make it one of the slower cars I've driven in the past year, so it's hard to imagine it's currently deciding what tattoos to get and substances to smoke.
It's much too smart for that. It's a rebel with a logical, practical cause: fuel efficiency.
Despite the weight and drag of its all-wheel-drive system, the Crosstrek earns an impressive 34 mpg on the highway and not-too-shabby 26 in city driving, according to government tests. That's almost in compact car territory, despite this vehicle's aggressive knack for off-roading.
In fact, that may be the biggest surprise of all in the Crosstrek. With its NBA-player ride height, brilliantly designed traction system and protective moldings around the fenders to keep the paint from getting too dinged up, this might be the most rugged compact off-roader I've driven that doesn't come with a Jeep or Land Rover badge.
While it wouldn't be the first vehicle I'd take rock climbing, it felt more than capable dashing through tall grass in cow pastures and seemed to beg for more of a challenge.
Ample rear-seat legroom and cargo capacity make the Crosstrek comfortable and practical for family trips.
I love the fact that Subaru's entire lineup consists of all-wheel-drive vehicles, something that helps its cars stand out as spunky and unique. Usually, that gives me peace of mind when the pavement gets slick from rain or ice.
In the Crosstrek, though, four-wheel traction makes even more sense as a vehicle designed to get you unstuck out in a field if the need ever arises. It's a perfect fit.
Pricing starts at $21,595 for the 2016 Crosstrek, the model year I tested. The 2017 version starts $100 higher at its base and also adds a new Premium Special Edition for $25,795 with a number of technology and style upgrades.
What was tested?
2016 Subaru Crosstrek 2.0i Premium ($22,395). Options: Package 14 with Starlink 7.0, EyeSight Driver Assist and Rear Vehicle Detection ($1,995), Lineartronic continuously variable transmission ($1,000). Price as tested (including $850 destination charge): $26,240
Wheelbase: 103.7 in.
Engine: 2.0-liter four cylinder (148 hp, 145 ft. lbs.)
Fuel Economy: 26 city, 34 highway
Style: 7
Performance: 8
Handling: 6
Ride: 5
Comfort: 6
Quality: 6
Why buy it?
As a fuel-efficient, wagon-like vehicle designed with off-road capability in mind and sporty driving characteristics, the Subaru Crosstrek checks a lot of wish-list boxes from disparate types of cars.
‹ A Nostalgic Drive
VW Shows Smaller is Better ›
Posted in Subaru
Fiat 500L (3)
© 2019 Cargazing


text:
'Different world' - Ali McCann talks deadline day, key influences & first impressions
McCann signed for Preston North End on transfer deadline day amid speculation with both Rangers and Celtic
George HodgsonPreston North End Writer
Preston North End's Ali McCann applauds the fans at the final whistle
Get the best PNE updates sent directly to your inbox
It's been non-stop for Ali McCann ever since his deadline day move to Preston North End, but he's taking everything in his stride and feeling on top of the world.
When you read and hear about the midfielder, and then meet him in person, that really isn't much of a surprise.
Frankie McAvoy has added the 21-year-old to his squad but McCann clearly has an extremely mature head on his shoulders - a focused, driven and determined individual who carries himself with confidence, but my no means arrogance.
Age is just a number and McCann arrives in Lancashire, closing in on 100 career appearances already.
Facing the local media for the first time at Euxton on Monday, the Northern Ireland international spoke very well and came across as a character who will fit right in at his new home.
Every opinion of the player and person from north of the border was a positive one and McCann did not show any signs of being daunted by the hype nor expectation.
He has bossed it against Galatasaray and Switzerland, won two cups in one season and is now ready to prove he belongs in the Championship.
McCann gives off the vibe of someone who doesn't cut corners, take the easy road or go missing when the going gets tough.
Here is what PNE's new number 13 had to say this morning:
READ MORE: Sheffield United boss confirms if Ben Davies could face Preston North End tomorrow
How was deadline day for you?
"It was very stressful at my end, sitting in my hotel room just sort of answering the phone every five minutes, which wasn't ideal I guess," he said.
"It definitely went right down to the wire but I was just glad to get it done in the end.
"Once it finished there was a sigh of relief and the excitement kicked in after that."
How big of a pull was coming to play in England?
"If the offer was there, I always wanted to experience football down here," he told LancsLive. "It's a different world to up in Scotland, a different set-up, schedule and I just wanted to try something new.
"It is going to be exciting to be a part of it."
Was there a moment in your career where you felt ready to take that next step?
"I feel like I have been ready for a while now," he added. "As I say, I am not one to kick up a fuss or force myself to leave but I feel like I was playing at quite a high level for St Johnstone and Northern Ireland as well.
"So I always thought that if the offer did come, then I would like to challenge myself down here.
"But the standard in the Scottish League is a good one, you've got tough games against the likes of Celtic, Rangers, Hibs, Hearts, Aberdeen - you don't get easy games up there.
"I am sure that will stand me in good stead coming down the road."
Is the international stage one you've embraced and taken to quite quickly?
"Yeah that was something difficult to get used to at first," he said. "Even the standard in training, the intensity of it is higher but the more you are involved, you get used to it.
"And you know that you're playing against world class players - like with Switzerland the other week - so it is great to test yourself up against these types.
"There is a good group of senior pros within the Northern Ireland team; I play alongside Steven Davis in central midfield and he has 130 odd caps.
"His experience is incredible and when I've been playing next to him, it just makes my life easier because he talks you through the game, you can watch him and he will help you out.
"He's been great for me."
What do you think the biggest test will be for you coming here and playing in the Championship?
"I don't really know to be fair, it's just a whole new experience for me and I will take it as I go," he said.
"But even this first week, we've got Sheffield United on Tuesday and West Brom on Saturday who are two massive clubs and it's just exciting to go up against them.
"Whatever part I play, even to just be there and a part of it is brilliant and I can't wait.
"You want to play the best teams don't you? Because they have the best players and looking at the league, there will be no easy games anyway because everyone's decent.
"So it's going to be tough but the stadiums like Bramall Lane, and playing West Brom, it'll be brilliant."
Have your first impressions of the squad been what you imagined?
"Yeah it's a good standard," he said. "Even in training on Friday, there was a zip about the place, it was hard and getting up to the standard was great for me.
"Everyone looks brilliant and the performance on Saturday sort of reflects that.
"We probably could've come away having won the game but it's a good point down in Bristol and we'll go again on Tuesday."
Off the pitch, are you hoping to get everything sorted soon?
"Yeah I am just plugging away trying to get that all sorted in the background," he said. "I'm sure I'll manage for the next few weeks.
"There has been loads of people who've given me advice and all that already, so I just need to find out where I'm going to live!"
Download the LancsLive app for free on iPhone here and Android here.
Don't miss a thing from the club you love! For all the latest updates on Preston North End, sign up to our free newsletter packed with all the latest news here.
Sheffield United boss confirms if Ben Davies could face Preston North End tomorrow
Frankie McAvoy's clarification on the two remaining spots in PNE's 25 man squad
Blackburn Rovers FCDilan Markanday has Jose Mourinho's approval as Tony Mowbray shares his transfer excitementTony Mowbray was delighted to confirm Dilan Markanday's permanent capture from Tottenham Hotspur
Burnley transfer picture as Clarets change tack, Dyche offers update and Wood windfall discussed
Burnley FCBurnley remain determined to strengthen their squad in the January transfer window
Sean Dyche's transfer message, Manchester United pursue £66m midfielder - Premier League rumours
Burnley FCThe latest January transfer news and rumours from the top flight
Blackburn Rovers confirm new front of shirt sponsor after Recoverite partnership ends prematurely
Blackburn Rovers FCBlackburn Rovers' contract with Recoverites Compression was due to expire in the summer
Blackpool FCEbou Adams Player Profile as Blackpool make enquiry for Forest Green midfielderThe Seasiders are on the hunt for a central midfielder in the January transfer window
'Get out of my comfort zone' - Dilan Markanday's first words as a new Blackburn Rovers player
Blackburn Rovers FCDilan Markanday became Blackburn Rovers' third signing of the January window after signing from Tottenham Hotspur
Dilan Markanday has Jose Mourinho's approval as Tony Mowbray shares his transfer excitement
Blackburn Rovers FCTony Mowbray was delighted to confirm Dilan Markanday's permanent capture from Tottenham Hotspur


For enhanced safety, the front seat shoulder belts of the Toyota Rav4 are height-adjustable to accommodate a wide variety of driver and passenger heights. A better fit can prevent injuries and the increased comfort also encourages passengers to buckle up. The MINI Countryman doesn't offer height-adjustable seat belts.
Over 200 people are killed each year when backed over by motor vehicles. The Rav4 (except LE) offers optional Rear Cross-Traffic Braking that uses rear sensors to monitor and automatically apply the brakes to prevent a rear collision. The Countryman doesn't offer backup collision prevention brakes.
The Rav4's lane departure warning system alerts a temporarily inattentive driver when the vehicle begins to leave its lane and gently nudges the vehicle back towards its lane. The Countryman doesn't offer a lane departure warning system.
The Rav4 Limited offers an optional Bird's Eye View Camera to allow the driver to see objects all around the vehicle on a screen. The Countryman only offers a rear monitor and front and rear parking sensors that beep or flash a light. That doesn't help with obstacles to the sides.
The Rav4's optional blind spot warning system uses digital cameras monitored by computer to alert the driver to moving objects in the vehicle's blind spots where the side view mirrors don't reveal them. The Countryman doesn't offer a system to reveal objects in the driver's blind spots.
To help make backing safer, the Rav4's optional cross-path warning system uses wide-angle radar in the rear bumper to alert the driver to vehicles approaching from the side, helping the driver avoid collisions. The Countryman doesn't offer a cross-path warning system.
The Rav4 has standard Safety Connect™, which uses a global positioning satellite (GPS) receiver and a cellular system to help track down your vehicle if it's stolen or send emergency personnel to the scene if any airbags deploy. The Countryman doesn't offer a GPS response system, only a navigation computer with no live response for emergencies, so if you're involved in an accident and you're incapacitated help may not come as quickly.
Both the Rav4 and the Countryman have standard driver and passenger frontal airbags, front side-impact airbags, driver knee airbags, side-impact head airbags, front seatbelt pretensioners, front wheel drive, four-wheel antilock brakes, traction control, electronic stability systems to prevent skidding, daytime running lights, rearview cameras and available all wheel drive.
Toyota's powertrain warranty covers the Rav4 1 year and 10,000 miles longer than MINI covers the Countryman. Any repair needed on the engine, transmission, axles, joints or driveshafts is fully covered for 5 years or 60,000 miles. Coverage on the Countryman ends after only 4 years or 50,000 miles.
There are almost 10 times as many Toyota dealers as there are MINI dealers, which makes it much easier should you ever need service under the Rav4's warranty.
The Rav4's 2.5 DOHC 4 cyl. produces 69 more horsepower (203 vs. 134) and 22 lbs.-ft. more torque (184 vs. 162) than the Countryman's standard 1.5 turbo 3 cyl. The Rav4's 2.5 DOHC 4 cyl. produces 14 more horsepower (203 vs. 189) than the Countryman S' standard 2.0 turbo 4 cyl.
S 2.0 turbo 4 cyl.
JCW 2.0 turbo 4 cyl.
The Toyota Rav4 comes standard with an automatic transmission, for driver comfort, especially in the city. Automatic costs extra on the Countryman.
For better traction, the Rav4 XLE Premium/Adventure/Limited's tires are larger than the largest tires available on the Countryman (235/55R19 vs. 225/55R17).
For better handling and stability, the average track (width between the wheels) on the Rav4 is .8 inches wider in the front and 1.4 inches wider in the rear than the average track on the Countryman.
The Rav4 Adventure handles at .81 G's, while the Countryman ALL4 pulls only .79 G's of cornering force in a Motor Trend skidpad test.
The Rav4 Adventure executes Motor Trend's "Figure Eight" maneuver quicker than the Countryman ALL4 (27.5 seconds @ .62 average G's vs. 28.3 seconds @ .58 average G's).
For better maneuverability, the Rav4 LE/XLE's turning circle is 1.3 feet tighter than the Countryman's (36.1 feet vs. 37.4 feet).
For greater off-road capability the Rav4 LE/XLE has a 1.9 inches greater minimum ground clearance than the Countryman (8.4 vs. 6.5 inches), allowing the Rav4 to travel over rougher terrain without being stopped or damaged. The Rav4 XLE Premium/Adventure/Limited's minimum ground clearance is 2.1 inches higher than on the Countryman (8.6 vs. 6.5 inches).
The front grille of the Rav4 Adventure/Limited uses electronically controlled shutters to close off airflow and reduce drag when less engine cooling is needed. This helps improve highway fuel economy. The Countryman doesn't offer active grille shutters.
The Rav4 has .6 inches more front legroom, 3 inches more front shoulder room, 2 inches more rear headroom, .2 inches more rear legroom and 2.4 inches more rear shoulder room than the Countryman.
The Rav4 has a much larger cargo volume with its rear seat up than the Countryman with its rear seat up (37.6 vs. 17.6 cubic feet). The Rav4 has a much larger cargo volume with its rear seat folded than the Countryman with its rear seat folded (69.8 vs. 47.6 cubic feet).
The Rav4 has a 1500 lbs. towing capacity. The Countryman has no towing capacity.
The Rav4 offers a remote vehicle starting system, so the vehicle can be started from inside the driver's house. This allows the driver to comfortably warm up the engine before going out to the vehicle. The climate system will also automatically heat or cool the interior. The Countryman doesn't offer a remote starting system.
To improve rear visibility by keeping the rear window clear, the Rav4 has a standard rear fixed intermittent wiper with a full on position. The rear wiper standard on the Countryman only has an intermittent setting, so in a hard rain visibility isn't as good.
Both the Rav4 and the Countryman offer available heated front seats. The Rav4 Limited also offers optional heated rear seats to keep those passengers extremely comfortable in the winter. Heated rear seats aren't available in the Countryman.
Optional air-conditioned seats in the Rav4 Adventure/Limited keep the driver and front passenger comfortable and take the sting out of hot seats in summer. The Countryman doesn't offer air-conditioned seats.
On extremely cold winter days, the Rav4 XLE AWD/XLE Premium/Adventure/Limited's optional heated steering wheel provides comfort, allowing the driver to steer safely and comfortably before the vehicle heater warms up. The Countryman doesn't offer a heated steering wheel.
The Rav4 Adventure has a 115-volt a/c outlet, allowing you to recharge a laptop or run small household appliances without special adapters that can break or get misplaced. The Countryman doesn't offer a house-current electrical outlet.
The Toyota Rav4 outsold the MINI Countryman by over 24 to one during 2018.


We provide all types of demolition services . We specializes in scrap metal demolition or any demolition with salvageable surplus .We services all of the major city in the U.S.A . We do residential ,commercial, industrial demolition, salvage, asset recovery,and property clean up . We also do marine salvage, barge , ship, vessel demolition and removal in maritime environment along with oilfield salvage and clean up . We will come out and give you a bid on your scrap metal project and let you know what your metal is worth . The larger the amount of metal , the more we will be able to offer you on your scrap . We buy metal buy the ton . It takes at least ten tons of metal or more before we will come out and make you a offer . So please give us a call to see what your industrial and commercial scrap metal is worth .


Slip into waterproof comfort with our Spring Surprise Rose print rain and garden shoe. Features our "All-Day Comfort" insoles for maximum comfort and our signature deep-lug tread for great traction. Easy on and easy to clean up. You'll soon know why Sloggers are America's #1 Backdoor Shoe. Note: prints may vary slightly from shoe to shoe. Women's 6 -11. Proudly Made in the USA.
I have 6 pair of these. I've even shoveled snow in them. Great traction, and they don't hut my feet!
The shoes that I ordered have been through manure, wet pasture, feeding animals, etc., and they are holding up and just as bright in their color as the day I received them. Very comfortable foot wear.


Proper carpet cleaning utilises specialised cleaning techniques by experienced technicians using carpet cleaning machines that will restore and maintain the look and feel of your carpets.
We offer a personal service to all of our customer and aim to build long standing relationships as we are confident that you will want to use our services again and again.
Our friendly and professional staff handle our cleaning services and help your carpet return to an almost as good as new condition guaranteeing best results and customer satisfaction. We know the difference a professional cleaning job can make. Your carpets and furnishings will look better and last longer.
A large number of houses contain dust mite allergen levels which pose a significant risk for the development of allergies and asthma. Most of time children play and crawl on the carpets and floor and breathe in this pollution. Our cleaning process gives carpets deep steam cleaning and sanitising, leading to optimal health benefits for you and your loved ones.
Very quick drying (normally 1 hour). Good to use mostly in the winter months.
Can use on older or delicate fabrics.
Will not clean extremely soiled carpets in high traffic areas.
Steam power extracts deep-down soil, allergens, bacteria, pollutants, dust and mites and revives your carpet's appearance and hygienic condition. It is the most recommended method of carpet cleaning by carpet manufacturers as it does not wear down or damage the fibers of the carpet. The steam carpet cleaning process gives carpets a deep clean and they are usually dry within 2 hours. 118 cleaning recommends using steam carpet cleaner for most commercial carpet cleaning.
Protectors are invisible and don't affect the feel or texture of the carpet or fabric. Professionally-applied carpet protectors help prevent permanent damage, blot up spills before they become stains, resist soiling and keep dirt from penetrating between the fibers and improve vacuuming efficiency. This is advisable for a cleaner and fresher carpets.
New Look - leaving carpets refreshed and enhanced appearance.
Eliminate Allergens - pollutants, bacteria, allergens, dust and mites and pet hair.
Stain Removal - spots, spills, stains and odours, special expert's techniques.
Pet Stain and Odour Removals - Quick cure for pet accidents.
Organic Cleaning - organic, non-toxic compounds to protect the health of your family & pets.
Freshness - Wall-to-wall freshness with carpet sanitizing and deodorising.
Saves Money - A softer, better carpet "You will not replace it now" - Enhances Appearance and Extends Carpet Life.
A 100% Guarantee - on all of our work.
Let our technicians bring your carpets back to life and make your home or workplace a more pleasant place to spend time. We offer a comprehensive service to all domestic and commercial clients.


text:
AudioVisual News
Seefeel Returns With Their First New Warp Release In 15 Years
Warp Records have announced Seefeel's first new release in 15 years, an EP called Faults. Due out September 21 in 10" and digital formats, it features four tracks and two new members, bassist Shigeru Ishihara (a.k.a. DJ Scotch Egg) and former Boredoms drummer E-da Kazuhisa.
Singer/guitarist Sarah Peacock first alluded to the dream-pop band's proper return in April, promising an EP and an LP in the coming year. Guitarist Mark Clifford explained the reunion even further in a press release today, saying, "We always said that we wouldn't record a new Seefeel record unless we could present something that we felt was new. When [the cult classic] Quique was re-issued a couple of years back myself and Sarah did some interviews together and we talked about recording new material. We exchanged a few ideas which were OK and things slowly got into gear but it was being asked to do the Warp20 show in Paris that really forced us to step up a couple of notches and since then, with the addition of E-da and Shige, things have developed and grown…There is a real dynamic, creative process that's exciting. We are growing as a live band, adding elements of improvisation and looser structures unimaginable to us a few years back and with continued touring–I'm excited to see how we develop in that direction."
Check out "Faults" after the jump, and if you're lucky enough to live in London, Seefeel will headline the ICA on September 16, with future international dates planned for next year.
NOW PLAYING: Seefeel, 'Seefeel'
The Artist/Album: Seefeel, Seefeel (Warp, 2011) A Short Review: Some of the surliest guitar work…
TEST PRESSING: Stream a Song From Seefeel's First LP In 14 Years
[Warp]
Lavender Diamond Returns With First New Record in Five Years
Remember Lavender Diamond? It's okay if you don't; after all, the group's first and only…
Previous NEEDLE EXCHANGE 028: An Exclusive Mix By … ArpLine
Next THE SELF-TITLED INTERVIEW: Sleigh Bells


text:
Das 6-Stunden-Rennen von Dijon 1978, auch 6 Hours Dijon, fand am 16. April auf dem Circuit de Dijon-Prenois statt und war der fünfte Wertungslauf der Sportwagen-Weltmeisterschaft dieses Jahres.

Das Rennen

Mit dem Rennen in Dijon fand die Sportwagen-Weltmeisterschaft 1978 ihre Fortsetzung. Wegen einer sehr schlechten Wetterprognose verkürzte der Veranstalter die Renndistanz von sechs auf vier Stunden. Der große Regen blieb am Renntag aus, die Rennverkürzung blieb. Erneut waren die eingesetzten Porsche 935 den Konkurrenzprodukten von BMW deutlich überlegen. Den Gesamtsieg fuhren Bob Wollek und Henri Pescarolo im Kremer-Porsche 935 ein.

Ergebnisse

Schlussklassement

1 nicht gestartet

Nur in der Meldeliste

Zu diesem Rennen sind keine weiteren Meldungen bekannt.

Klassensieger

Renndaten

 Gemeldet: 23
 Gestartet: 22
 Gewertet: 16
 Rennklassen: 2
 Zuschauer: unbekannt
 Wetter am Renntag: kalt und wolkig
 Streckenlänge: 3,800 km
 Fahrzeit des Siegerteams: 4:00:55,850 Stunden
 Gesamtrunden des Siegerteams: 169
 Gesamtdistanz des Siegerteams: 642,200 km
 Siegerschnitt: 159,930 km/h
 Pole Position: Toine Hezemans – Porsche 935/77A (#6) – 1:20,440 = 170,965 km/h
 Schnellste Rennrunde: Toine Hezemans – Porsche 935/77A (#6) – 1:21,700 = 167,442 km/h
 Rennserie: 5. Lauf zur Sportwagen-Weltmeisterschaft 1978

Literatur

 Peter Higham: The Guinness Guide to International Motor Racing. A complete Reference from Formula 1 to Touring Car. Guinness Publishing Ltd., London 1995, ISBN 0-85112-642-1.

Weblinks

 Rennergebnisse

Rennen der Sportwagen-Weltmeisterschaft 1978
Motorsportwettbewerb in Frankreich
Sportveranstaltung in Prenois

redpajama_set_name: RedPajamaWikipedia


Swish would like to wish all of you a very happy International Women's Day! Everyday is a celebration of you amazing women at Swish, but we are taking special consideration today of all the feats accomplished by women throughout the centuries from Susan B. Anthony to Mia Rudolph, Margret Thatcher to Marie Curie, Serena Williams to Layne Beachley, women are awesome in all shapes and forms so today in celebration we encourage you to get out there and dedicate a portion of your day to an amazing women! Catch that wave, hit your arm balance, dive deep, swim fast and think about how this person had shaped your life. I guarantee there is someone else out there dedicating their practice to you!
We are honored to have so many amazing women on the Swish Team and we would like to thank them personally for their inspiration in creating Swish Suits. Ashley, Allie, Brenda, Cailey, Cara, Dominique, Emily, Farrah, Jessica, Kaila, Kate, Krista, Morgan, Sandra, Stephanie, and anyone else who has supported Swish over the year. You make Swish great!


Tampa Bay is a beautiful place to live! For people relocating to the area, it can be challenging to know just where "Tampa Bay, Florida" is located. Here is some hopefully helpful information for you.
Tampa Bay Area - While "definitions" of the Tampa Bay area differ, the term most commonly refers to the three principal cities of Tampa, St. Petersburg, and Clearwater. The two primary counties in the area are Hillsborough and Pinellas. At times, parts of Pasco and Hernando counties are also included when referencing the Tampa Bay area.
Tampa Bay - Tampa Bay is an estuary and harbour on the west coast of Florida along the Gulf of Mexico. Tampa, Clearwater, and St. Petersburg are the three largest cities adjacent to Tampa Bay.
Tampa - As well as the county seat of Hillsborough County, Tampa is the largest city in the Tampa Bay area. Generally, Tampa is divided into the areas of Downtown Tampa, South Tampa, North Tampa, and New Tampa. West Tampa is one of Tampa's six historic districts which also include Hampton Terrace, Hyde Park, Seminole Heights, Tampa Heights, and Ybor City.
City of Tampa - While "Tampa" usually refers to most of Hillsborough County, the City of Tampa does not. There are areas of Tampa that are not in the corporate limits of the City of Tampa. New Tampa was annexed in 1988 becoming part of the City of Tampa. The term New Tampa often refers to unincorporated areas as well.
Unincorporated areas include Brandon, Carrollwood, and Westchase.
Temple Terrace - Temple Terrace is one of the three incorporated municipalities in Hillsborough County. Named for the Temple orange, Temple Terrace is adjacent to Tampa and not far from Tampa's University of South Florida.
Tampa's Surrounding Areas - In addition to the cities and unincorporated areas mentioned above, some of the areas surrounding Tampa include Plant City, Riverview, and Apollo Beach.
St Petersburg - Located on a peninsula between Tampa Bay and the Gulf of Mexico, St. Petersburg is Florida's fourth largest city. With 361 days of sunshine a year, St. Pete is nicknamed "The Sunshine City". St Petersburg is in Pinellas County.
Clearwater - Clearwater is the smallest of the three principal cities in the Tampa Bay Area and the county seat of Pinellas County. In January, 2013, Clearwater Beach was voted "Best Beach Town in Florida" by USA Today readers.
Until January, 2012, the Tampa Bay Times Forum was actually named the St. Pete Times Forum even though located in downtown Tampa. It's no wonder that online information about the Tampa Bay Area can be confusing. When hiring a Tampa Bay REALTOR®, it is important to find one that understands the area as well as the real estate process. Linda Holloway would welcome the opportunity to help you find Your Next Home in Tampa Bay!
Which Tampa Bay Lifestyle will you enjoy?


Hug your hygienists this month! And follow their oral health advice.
Their message for October, which is National Dental Hygiene Month, revolves around "The Daily 4" and the difference Brushing, Flossing, Rinsing and Chewing can make for your patient's oral health featured in the poster shown above.


text:
Cindy's Underdog
Win $500 From Ziebart
WOUR App
WOUR On Google Home
Mimi Griswold
WOUR Mobile App
Rock Rewards
Rockin AfternoonsRockin Afternoons
Did Joan Jett Die Of Coronavirus?
Dave "Wheels" Wheeler
Jemal Countess/Getty Images
In the world of Coronavirus, we are starting to see more deaths everyday. Twitter, and Google are showing that "Joan Jett died of Coronavirus" in March. Is this true?
When you Google "Did Joan Jett die" you see this:
Currently, no news outlets are reporting on this. We will update this story when more information is provided. As of 10:37PM EST, we are leaning this is an internet rumor.
These Tweets also help us believe its a rumor:
Guitar World reports that Alan Merrill, who was the frontman for 1970s rockers the Arrows and was best known for co-writing "I Love Rock 'N Roll", died from complications of coronavirus in New York on March 29. He was 69 years old. Many are starting to think that's how Jett was connected to this.
Jett has been very active on YouTube and social media during the COVID19 pandemic. Jett, Michael McDonald and Ritchie Blackmore were among the latest artists to perform from lockdown at home as a result of the coronavirus pandemic.
Jett connected with her Blackhearts bandmates to perform "Light of Day" - which was written by Bruce Springsteen and originally recorded by Jett for the 1987 movie of the same name - with all four members in their own homes.
Philadelphia-born Joan Larkin got her start in the band the Runaways (with Lita Ford) when she was just 15 years old. But it was her solo career, which she launched with 1980's 'Bad Reputation' album, that made her a star. 1981's surprise hit 'I Love Rock-N-Roll' was a No. 1 hit single; the album reached No. 2. With her band the Blackhearts, Jett released a string of albums over the years. In 1987, she starred in the movie 'Light of Day' with Michael J. Fox. Jett was inducted into the Rock and Roll Hall of Fame in 2015.
Filed Under: Coronavirus (COVID-19), Joan Jett
2021 96.9 WOUR, Townsquare Media, Inc. All rights reserved.


text:
{-# LANGUAGE DeriveDataTypeable, FlexibleContexts, FlexibleInstances, MultiParamTypeClasses, PatternGuards, TypeSynonymInstances #-}
-----------------------------------------------------------------------------
-- |
-- Module      :  XMonad.Layout.Decoration
-- Copyright   :  (c) 2007 Andrea Rossato, 2009 Jan Vornberger
-- License     :  BSD-style (see xmonad/LICENSE)
--
-- Maintainer  :  andrea.rossato@unibz.it
-- Stability   :  unstable
-- Portability :  unportable
--
-- A layout modifier and a class for easily creating decorated
-- layouts.
-----------------------------------------------------------------------------

module XMonad.Layout.Decoration
    ( -- * Usage:
      -- $usage
      decoration
    , Theme (..), defaultTheme, def
    , Decoration
    , DecorationMsg (..)
    , DecorationStyle (..)
    , DefaultDecoration (..)
    , Shrinker (..), DefaultShrinker
    , shrinkText, CustomShrink ( CustomShrink ), shrinkWhile
    , isInStack, isVisible, isInvisible, isWithin, fi
    , findWindowByDecoration
    , module XMonad.Layout.LayoutModifier
    , DecorationState, OrigWin
    ) where

import Control.Monad (when)
import Data.Maybe
import Data.List
import Foreign.C.Types(CInt)

import XMonad
import qualified XMonad.StackSet as W
import XMonad.Hooks.UrgencyHook
import XMonad.Layout.LayoutModifier
import XMonad.Layout.WindowArranger (WindowArrangerMsg (..), diff, listFromList)
import XMonad.Util.NamedWindows (getName)
import XMonad.Util.Invisible
import XMonad.Util.XUtils
import XMonad.Util.Font
import XMonad.Util.Image

-- $usage
-- This module is intended for layout developers, who want to decorate
-- their layouts. End users will not find here very much for them.
--
-- For examples of 'DecorationStyle' instances you can have a look at
-- "XMonad.Layout.SimpleDecoration", "XMonad.Layout.Tabbed",
-- "XMonad.Layout.DwmStyle", or "XMonad.Layout.TabBarDecoration".

-- | A layout modifier that, with a 'Shrinker', a 'Theme', a
-- 'DecorationStyle', and a layout, will decorate this layout
-- according to the decoration style provided.
--
-- For some usage examples see "XMonad.Layout.DecorationMadness".
decoration :: (DecorationStyle ds a, Shrinker s) => s -> Theme -> ds a
           -> l a -> ModifiedLayout (Decoration ds s) l a
decoration s t ds = ModifiedLayout (Decoration (I Nothing) s t ds)

-- | A 'Theme' is a record of colors, font etc., to customize a
-- 'DecorationStyle'.
--
-- For a collection of 'Theme's see "XMonad.Util.Themes"
data Theme =
    Theme { activeColor        :: String                   -- ^ Color of the active window
          , inactiveColor       :: String                   -- ^ Color of the inactive window
          , urgentColor         :: String                   -- ^ Color of the urgent window
          , activeBorderColor   :: String                   -- ^ Color of the border of the active window
          , inactiveBorderColor :: String                   -- ^ Color of the border of the inactive window
          , urgentBorderColor   :: String                   -- ^ Color of the border of the urgent window
          , activeTextColor     :: String                   -- ^ Color of the text of the active window
          , inactiveTextColor   :: String                   -- ^ Color of the text of the inactive window
          , urgentTextColor     :: String                   -- ^ Color of the text of the urgent window
          , borderWidthH        :: Dimension                -- ^ Horizontal border width
          , borderWidthV        :: Dimension                -- ^ Vertical border width
          , fontName            :: String                   -- ^ Font name
          , decoWidth           :: Dimension                -- ^ Maximum width of the decorations (if supported by the 'DecorationStyle')
          , decoHeight          :: Dimension                -- ^ Height of the decorations
          , windowTitleAddons   :: [(String, Align)]       -- ^ Extra text to appear in a window's title bar.
                                                           --    Refer to for a use "XMonad.Layout.ImageButtonDecoration"
          , windowTitleIcons    :: [([[Bool]], Placement)] -- ^ Extra icons to appear in a window's title bar.
                                                           --    Inner @[Bool]@ is a row in a icon bitmap.
          } deriving (Show, Read)

instance Default Theme where
  def =
    Theme { activeColor         = "#999999"
          , inactiveColor       = "#666666"
          , urgentColor         = "#FFFF00"
          , activeBorderColor   = "#FFFFFF"
          , inactiveBorderColor = "#BBBBBB"
          , urgentBorderColor   = "##00FF00"
          , activeTextColor     = "#FFFFFF"
          , inactiveTextColor   = "#BFBFBF"
          , urgentTextColor     = "#FF0000"
          , borderWidthH        = 1
          , borderWidthV        = 1
          , fontName            = "-misc-fixed-*-*-*-*-10-*-*-*-*-*-*-*"
          , decoWidth           = 200
          , decoHeight          = 20
          , windowTitleAddons   = []
          , windowTitleIcons    = []
          }

{-# DEPRECATED defaultTheme "Use def (from Data.Default, and re-exported by XMonad.Layout.Decoration) instead." #-}
-- | The default xmonad 'Theme'.
defaultTheme :: Theme
defaultTheme = def

-- | A 'Decoration' layout modifier will handle 'SetTheme', a message
-- to dynamically change the decoration 'Theme'.
data DecorationMsg = SetTheme Theme deriving ( Typeable )
instance Message DecorationMsg

-- | The 'Decoration' state component, where the list of decorated
-- window's is zipped with a list of decoration. A list of decoration
-- is a list of tuples, a 'Maybe' 'Window' and a 'Maybe Rectangle'.
-- The 'Window' will be displayed only if the rectangle is of type
-- 'Just'.
data DecorationState =
    DS { decos :: [(OrigWin,DecoWin)]
       , font  :: XMonadFont
       }
type DecoWin = (Maybe Window, Maybe Rectangle)
type OrigWin = (Window,Rectangle)

-- | The 'Decoration' 'LayoutModifier'. This data type is an instance
-- of the 'LayoutModifier' class. This data type will be passed,
-- together with a layout, to the 'ModifiedLayout' type constructor
-- to modify the layout by adding decorations according to a
-- 'DecorationStyle'.
data Decoration ds s a =
    Decoration (Invisible Maybe DecorationState) s Theme (ds a)
    deriving (Show, Read)

-- | The 'DecorationStyle' class, defines methods used in the
-- implementation of the 'Decoration' 'LayoutModifier' instance. A
-- type instance of this class is passed to the 'Decoration' type in
-- order to decorate a layout, by using these methods.
class (Read (ds a), Show (ds a), Eq a) => DecorationStyle ds a where

    -- | The description that the 'Decoration' modifier will display.
    describeDeco :: ds a -> String
    describeDeco ds = show ds

    -- | Shrink the window's rectangle when applying a decoration.
    shrink :: ds a -> Rectangle -> Rectangle -> Rectangle
    shrink _ (Rectangle _ _ _ dh) (Rectangle x y w h) = Rectangle x (y + fi dh) w (h - dh)

    -- | The decoration event hook
    decorationEventHook :: ds a -> DecorationState -> Event -> X ()
    decorationEventHook ds s e = handleMouseFocusDrag ds s e

    -- | A hook that can be used to catch the cases when the user
    -- clicks on the decoration. If you return True here, the click event
    -- will be considered as dealt with and no further processing will take place.
    decorationCatchClicksHook :: ds a
                              -> Window
                              -> Int    -- ^ distance from the left where the click happened on the decoration
                              -> Int    -- ^ distance from the right where the click happened on the decoration
                              -> X Bool
    decorationCatchClicksHook _ _ _ _ = return False

    -- | This hook is called while a window is dragged using the decoration.
    -- The hook can be overwritten if a different way of handling the dragging
    -- is required.
    decorationWhileDraggingHook :: ds a -> CInt -> CInt -> (Window, Rectangle) -> Position -> Position -> X ()
    decorationWhileDraggingHook _ ex ey (mainw, r) x y = handleDraggingInProgress ex ey (mainw, r) x y

    -- | This hoook is called after a window has been dragged using the decoration.
    decorationAfterDraggingHook :: ds a -> (Window, Rectangle) -> Window -> X ()
    decorationAfterDraggingHook _ds (mainw, _r) _decoWin = focus mainw

    -- | The pure version of the main method, 'decorate'.
    pureDecoration :: ds a -> Dimension -> Dimension -> Rectangle
                   -> W.Stack a -> [(a,Rectangle)] -> (a,Rectangle) -> Maybe Rectangle
    pureDecoration _ _ ht _ s _ (w,Rectangle x y wh ht') = if isInStack s w && (ht < ht')
                                                             then Just $ Rectangle x y wh ht
                                                             else Nothing

    -- | Given the theme's decoration width and height, the screen
    -- rectangle, the windows stack, the list of windows and
    -- rectangles returned by the underlying layout and window to be
    -- decorated, tupled with its rectangle, produce a 'Just'
    -- 'Rectangle' or 'Nothing' if the window is not to be decorated.
    decorate :: ds a -> Dimension -> Dimension -> Rectangle
             -> W.Stack a -> [(a,Rectangle)] -> (a,Rectangle) -> X (Maybe Rectangle)
    decorate ds w h r s wrs wr = return $ pureDecoration ds w h r s wrs wr

-- | The default 'DecorationStyle', with just the default methods'
-- implementations.
data DefaultDecoration a = DefaultDecoration deriving ( Read, Show )
instance Eq a => DecorationStyle DefaultDecoration a

-- | The long 'LayoutModifier' instance for the 'Decoration' type.
--
-- In 'redoLayout' we check the state: if there is no state we
-- initialize it.
--
-- The state is 'diff'ed against the list of windows produced by the
-- underlying layout: removed windows get deleted and new ones
-- decorated by 'createDecos', which will call 'decorate' to decide if
-- a window must be given a 'Rectangle', in which case a decoration
-- window will be created.
--
-- After that we resync the updated state with the windows' list and
-- then we process the resynced stated (as we do with a new state).
--
-- First we map the decoration windows, we update each decoration to
-- reflect any decorated window's change, and we insert, in the list
-- of windows and rectangles returned by the underlying layout, the
-- decoration for each window. This way xmonad will restack the
-- decorations and their windows accordingly. At the end we remove
-- invisible\/stacked windows.
--
-- Message handling is quite simple: when needed we release the state
-- component of the 'Decoration' 'LayoutModifier'. Otherwise we call
-- 'handleEvent', which will call the appropriate 'DecorationStyle'
-- methods to perform its tasks.
instance (DecorationStyle ds Window, Shrinker s) => LayoutModifier (Decoration ds s) Window where
    redoLayout (Decoration (I (Just s)) sh t ds) _ Nothing _ = do
        releaseResources s
        return ([], Just $ Decoration (I Nothing) sh t ds)
    redoLayout _                                 _ Nothing _  = return ([], Nothing)

    redoLayout (Decoration st sh t ds) sc (Just stack) wrs
        | I Nothing  <- st = initState t ds sc stack wrs >>= processState
        | I (Just s) <- st = do let dwrs  = decos s
                                    (d,a) = curry diff (get_ws dwrs) ws
                                    toDel = todel d dwrs
                                    toAdd = toadd a wrs
                                deleteDecos (map snd toDel)
                                let ndwrs = zip toAdd $ repeat (Nothing,Nothing)
                                ndecos <- resync (ndwrs ++ del_dwrs d dwrs) wrs
                                processState (s {decos = ndecos })
        | otherwise        = return (wrs, Nothing)

        where
          ws        = map fst wrs
          get_w     = fst . fst
          get_ws    = map get_w
          del_dwrs  = listFromList get_w notElem
          find_dw i = fst . snd . flip (!!) i
          todel   d = filter (flip elem d . get_w)
          toadd   a = filter (flip elem a . fst  )

          check_dwr dwr = case dwr of
                            (Nothing, Just dr) -> do dw <- createDecoWindow t dr
                                                     return (Just dw, Just dr)
                            _                 -> return dwr

          resync _         [] = return []
          resync d ((w,r):xs) = case  w `elemIndex` get_ws d of
                                  Just i  -> do dr   <- decorate ds (decoWidth t) (decoHeight t) sc stack wrs (w,r)
                                                dwr  <- check_dwr (find_dw i d, dr)
                                                dwrs <- resync d xs
                                                return $ ((w,r),dwr) : dwrs
                                  Nothing -> resync d xs

          -- We drop any windows that are *precisely* stacked underneath
          -- another window: these must be intended to be tabbed!
          remove_stacked rs ((w,r):xs)
              | r `elem` rs   = remove_stacked rs xs
              | otherwise     = (w,r) : remove_stacked (r:rs) xs
          remove_stacked _ [] = []

          insert_dwr ((w,r),(Just dw,Just dr)) xs = (dw,dr):(w, shrink ds dr r):xs
          insert_dwr (x    ,(     _ ,     _ )) xs = x:xs

          dwrs_to_wrs    = remove_stacked [] . foldr insert_dwr []

          processState s = do let ndwrs = decos s
                              showDecos (map snd ndwrs)
                              updateDecos sh t (font s) ndwrs
                              return (dwrs_to_wrs ndwrs, Just (Decoration (I (Just (s {decos = ndwrs}))) sh t ds))

    handleMess (Decoration (I (Just s@(DS {decos = dwrs}))) sh t ds) m
        | Just e <- fromMessage m                = do decorationEventHook ds s e
                                                      handleEvent sh t s e
                                                      return Nothing
        | Just Hide             <- fromMessage m = do hideDecos (map snd dwrs)
                                                      return Nothing
        | Just (SetTheme nt)    <- fromMessage m = do releaseResources s
                                                      return $ Just $ Decoration (I Nothing) sh nt ds
        | Just ReleaseResources <- fromMessage m = do releaseResources s
                                                      return $ Just $ Decoration (I Nothing) sh t  ds
    handleMess _ _ = return Nothing

    modifierDescription (Decoration _ _ _ ds) = describeDeco ds

-- | By default 'Decoration' handles 'PropertyEvent' and 'ExposeEvent'
-- only.
handleEvent :: Shrinker s => s -> Theme -> DecorationState -> Event -> X ()
handleEvent sh t (DS dwrs fs) e
    | PropertyEvent {ev_window = w} <- e
    , Just i <- w `elemIndex`             (map (fst . fst) dwrs) = updateDeco sh t fs (dwrs !! i)
    | ExposeEvent   {ev_window = w} <- e
    , Just i <- w `elemIndex` (catMaybes $ map (fst . snd) dwrs) = updateDeco sh t fs (dwrs !! i)
handleEvent _ _ _ _ = return ()

-- | Mouse focus and mouse drag are handled by the same function, this
-- way we can start dragging unfocused windows too.
handleMouseFocusDrag :: (DecorationStyle ds a) => ds a -> DecorationState -> Event -> X ()
handleMouseFocusDrag ds (DS dwrs _) ButtonEvent { ev_window     = ew
                                                , ev_event_type = et
                                                , ev_x_root     = ex
                                                , ev_y_root     = ey }
    | et == buttonPress
    , Just ((mainw,r), (_, decoRectM)) <- lookFor ew dwrs = do
        let Just (Rectangle dx _ dwh _) = decoRectM
            distFromLeft = ex - fi dx
            distFromRight = fi dwh - (ex - fi dx)
        dealtWith <- decorationCatchClicksHook ds mainw (fi distFromLeft) (fi distFromRight)
        when (not dealtWith) $ do
            mouseDrag (\x y -> focus mainw >> decorationWhileDraggingHook ds ex ey (mainw, r) x y)
                        (decorationAfterDraggingHook ds (mainw, r) ew)
handleMouseFocusDrag _ _ _ = return ()

handleDraggingInProgress :: CInt -> CInt -> (Window, Rectangle) -> Position -> Position -> X ()
handleDraggingInProgress ex ey (_, r) x y = do
    let rect = Rectangle (x - (fi ex - rect_x r))
                         (y - (fi ey - rect_y r))
                         (rect_width  r)
                         (rect_height r)
    sendMessage $ SetGeometry rect

-- | Given a window and the state, if a matching decoration is in the
-- state return it with its ('Maybe') 'Rectangle'.
lookFor :: Window -> [(OrigWin,DecoWin)] -> Maybe (OrigWin,(Window,Maybe Rectangle))
lookFor w ((wr,(Just dw,dr)):dwrs) | w == dw = Just (wr,(dw,dr))
                                   | otherwise = lookFor w dwrs
lookFor w ((_, (Nothing, _)):dwrs) = lookFor w dwrs
lookFor _ [] = Nothing

findWindowByDecoration :: Window -> DecorationState -> Maybe (OrigWin,(Window,Maybe Rectangle))
findWindowByDecoration w ds = lookFor w (decos ds)

-- | Initialize the 'DecorationState' by initializing the font
-- structure and by creating the needed decorations.
initState :: DecorationStyle ds Window => Theme -> ds Window -> Rectangle
          -> W.Stack Window -> [(Window,Rectangle)] -> X DecorationState
initState t ds sc s wrs = do
  fs   <- initXMF (fontName t)
  dwrs <- createDecos t ds sc s wrs wrs
  return $ DS dwrs fs

-- | Delete windows stored in the state and release the font structure.
releaseResources :: DecorationState -> X ()
releaseResources s = do
  deleteDecos (map snd $ decos s)
  releaseXMF  (font s)

-- | Create the decoration windows of a list of windows and their
-- rectangles, by calling the 'decorate' method of the
-- 'DecorationStyle' received.
createDecos :: DecorationStyle ds Window => Theme -> ds Window -> Rectangle -> W.Stack Window
            -> [(Window,Rectangle)] -> [(Window,Rectangle)] -> X [(OrigWin,DecoWin)]
createDecos t ds sc s wrs ((w,r):xs) = do
  deco <- decorate ds (decoWidth t) (decoHeight t) sc s wrs (w,r)
  case deco of
    Just dr -> do dw   <- createDecoWindow t dr
                  dwrs <- createDecos t ds sc s wrs xs
                  return $ ((w,r), (Just dw, Just dr)) : dwrs
    Nothing -> do dwrs <- createDecos t ds sc s wrs xs
                  return $ ((w,r), (Nothing, Nothing)) : dwrs
createDecos _ _ _ _ _ [] = return []

createDecoWindow :: Theme -> Rectangle -> X Window
createDecoWindow t r = let mask = Just (exposureMask .|. buttonPressMask) in
                       createNewWindow r mask (inactiveColor t) True

showDecos :: [DecoWin] -> X ()
showDecos = showWindows . catMaybes . map fst . filter (isJust . snd)

hideDecos :: [DecoWin] -> X ()
hideDecos = hideWindows . catMaybes . map fst

deleteDecos :: [DecoWin] -> X ()
deleteDecos = deleteWindows . catMaybes . map fst

updateDecos :: Shrinker s => s -> Theme -> XMonadFont -> [(OrigWin,DecoWin)] -> X ()
updateDecos s t f = mapM_ $ updateDeco s t f

-- | Update a decoration window given a shrinker, a theme, the font
-- structure and the needed 'Rectangle's
updateDeco :: Shrinker s => s -> Theme -> XMonadFont -> (OrigWin,DecoWin) -> X ()
updateDeco sh t fs ((w,_),(Just dw,Just (Rectangle _ _ wh ht))) = do
  nw  <- getName w
  ur  <- readUrgents
  dpy <- asks display
  let focusColor win ic ac uc = (maybe ic (\focusw -> case () of
                                                       _ | focusw == win -> ac
                                                         | win `elem` ur -> uc
                                                         | otherwise     -> ic) . W.peek)
                                `fmap` gets windowset
  (bc,borderc,tc) <- focusColor w (inactiveColor t, inactiveBorderColor t, inactiveTextColor t)
                                  (activeColor   t, activeBorderColor   t, activeTextColor   t)
                                  (urgentColor   t, urgentBorderColor   t, urgentTextColor   t)
  let s = shrinkIt sh
  name <- shrinkWhile s (\n -> do size <- io $ textWidthXMF dpy fs n
                                  return $ size > fromIntegral wh - fromIntegral (ht `div` 2)) (show nw)
  let als = AlignCenter : map snd (windowTitleAddons t)
      strs = name : map fst (windowTitleAddons t)
      i_als = map snd (windowTitleIcons t)
      icons = map fst (windowTitleIcons t)
  paintTextAndIcons dw fs wh ht (borderWidthH t) (borderWidthV t) bc borderc tc bc als strs i_als icons
updateDeco _ _ _ (_,(Just w,Nothing)) = hideWindow w
updateDeco _ _ _ _ = return ()

-- | True if the window is in the 'Stack'. The 'Window' comes second
-- to facilitate list processing, even though @w \`isInStack\` s@ won't
-- work...;)
isInStack :: Eq a => W.Stack a -> a -> Bool
isInStack s = flip elem (W.integrate s)

-- | Given a 'Rectangle' and a list of 'Rectangle's is True if the
-- 'Rectangle' is not completely contained by any 'Rectangle' of the
-- list.
isVisible :: Rectangle -> [Rectangle] -> Bool
isVisible r = and . foldr f []
    where f x xs = if r `isWithin` x then False : xs else True : xs

-- | The contrary of 'isVisible'.
isInvisible :: Rectangle -> [Rectangle] -> Bool
isInvisible r = not . isVisible r

-- | True is the first 'Rectangle' is totally within the second
-- 'Rectangle'.
isWithin :: Rectangle -> Rectangle -> Bool
isWithin (Rectangle x y w h) (Rectangle rx ry rw rh)
    | x >= rx, x <= rx + fi rw
    , y >= ry, y <= ry + fi rh
    , x + fi w <= rx + fi rw
    , y + fi h <= ry + fi rh = True
    | otherwise              = False

shrinkWhile :: (String -> [String]) -> (String -> X Bool) -> String -> X String
shrinkWhile sh p x = sw $ sh x
    where sw [n] = return n
          sw [] = return ""
          sw (n:ns) = do
                        cond <- p n
                        if cond
                          then sw ns
                          else return n

data CustomShrink = CustomShrink
instance Show CustomShrink where show _ = ""
instance Read CustomShrink where readsPrec _ s = [(CustomShrink,s)]

class (Read s, Show s) => Shrinker s where
    shrinkIt :: s -> String -> [String]

data DefaultShrinker = DefaultShrinker
instance Show DefaultShrinker where show _ = ""
instance Read DefaultShrinker where readsPrec _ s = [(DefaultShrinker,s)]
instance Shrinker DefaultShrinker where
    shrinkIt _ "" = [""]
    shrinkIt s cs = cs : shrinkIt s (init cs)

shrinkText :: DefaultShrinker
shrinkText = DefaultShrinker