text:
All Type Part Number Brand
Batteries & Chargers Connectors Displays & Optoelectronics ESD Control Cleanroon & PCB Prototyping Passive Components Power Supplies & Transformers Raspberry Pi, Arduino & Development Tools Semiconductors
Automation & Control Gear Cables & Wires Enclosures & Server Racks Fuses, Sockets & Circuit Breakers HVAC, Fans & Thermal Management Lighting Relays Switches
Access, Storage & Material Handling Adhesives, Sealants & Tapes Engineering Materials & Industrial Hardware Fasteners & Fixings Plumbing & Pipeline Pneumatics, Hydraulics & Power Transmission Power Tools, Soldering & Welding
Computing & Peripherals Facilities Cleaning & Maintainance Office Supplies Personal Protective Equipments & Workwear Security & Ironmongery Site Safety Test & Measurement
Contact Us Orders & Payment Shipping Options Returns
Our website uses cookies to help enhance your browsing experience. Continue to browse our site if you agree to our Privacy Policy.
Plumbing is the system and infrastructure used to transport media such as water, oil, and gas. The most common applications for plumbing include water supply, waste removal and HVAC (heating and cooling).
Pipes, hoses, and tubes
Pipes, hoses, and tubes are fundamental to plumbing. They are the hollow cylinders used to transport fluids and gases. Pipes, hoses and tubes are available in a range of materials to suit every application. These materials include PVC, PEX, copper, galvanised steel, and cast iron.
Pipe fittings are used to connect pipes together and can change the direction of flow. They are manufactured from a variety of materials including copper, bronze, and brass. With a choice of push-fit, threaded fittings, sockets, elbows and tees you will be able to find the perfect fitting for your application.
HVAC (Heating, ventilation, and air conditioning)
Plumbing products are commonly used for heating, ventilation and air conditioning applications. Products include radiators, water heaters, central heating pumps, process pumps, and solar-powered heating systems.
Maintaining a plumbing system is essential. Not only can it extend the lifespan of the system, but it can also help avoid costly repairs and prevent accidents. Filters, cleaning brushes and descaling kits can help to prolong pipes and equipment.
Sealants create a watertight or airtight seal. Sealants can be used to prevent pipes from leaking where they are joined.
A number of accessories can be integrated into your plumbing system. Sealing kits and tape can reinforce the seals within your plumbing while preventing threads from shearing. Pipe marking tape is ideal to identify different types of pipe.
RS Catalogue
FLUKE Catalogue
Privacy Policy - Conditions of Use
© ARAB ENGINEERS CO. LTD., All rights reserved


On December 15 PetrSU hosted the Festival of Nations, an astounding final event of the International Volunteer School, a project implemented with the financial support of the Federal Agency for Youth Affairs.
For the first time, the scene of the assembly hall of PetrSU welcomed students from 14 countries. The participants of the international volunteer program The Russian Language Ambassadors to the World presented Russia and played spoons accompanied by lively familiar song Valenki. The students from Jordan danced dabke, traditional Arabian dance.
The representatives of Africa, the students from Botswana, Benin, Equatorial Guinea, Zambia, RSA, and Ghana, prepared a colorful performance that included a demonstration of costumes, group dance, and freestyle. The Zambian student Phiri Chisomo sang a love song All I Want.
The audience listened to the sounds of Chinese traditional instrument xun and the songs in the French and Chinese languages. During the preparation for the Festival, the students have formed a duet as Karam from Jordan beatboxed while Anas from the UAE rapped. Those present also had a rare opportunity to hear an excerpt from the Divine Comedy by Dante in the original language.
The Kajahus ensemble demonstrated traditional costumes, sewn by the members of the ensemble, sang folk Karelian songs and played kantele, the musical instrument of Karelian and Finnish peoples. The final performance of the international students was the Turkmen dance, traditionally danced at the end.
The grand finale of the Festival was the uplifting song Million Voices, performed by the volunteers, who participated in the International Volunteer School. It was an exceptionally colorful and emotional festival.
"For our young project, the Festival became an outstanding and significant event. It is a unique event for the university and the city, as never before have so many international students performed on the big stage. We wanted to show what students study at PetrSU and how amazing the world around us can be," said Anna Soboleva, the head of the project.


text:
Nikola Jokic selected to 2018-19 All-NBA first…
Nikola Jokic selected to 2018-19 All-NBA first team
Jokic is first Nuggets player to earn first-team honors since David Thompson in 1978
AAron Ontiveroz, The Denver Post
Nikola Jokic (15) of the Denver Nuggets and Jamal Murray (27) get hyped after a Gary Harris (14) score against the Portland Trail Blazers to really push the momentum in their favor during the second quarter on Tuesday, May 7, 2019. The Denver Nuggets versus the Portland Trail Blazers in game five of the teams' second round NBA playoff series at the Pepsi Center in Denver.
By Joe Nguyen | jnguyen@denverpost.com | The Denver Post
PUBLISHED: May 23, 2019 at 12:15 pm | UPDATED: May 23, 2019 at 5:06 pm
Add another accolade to Nikola Jokic's résumé.
The Nuggets' star center on Thursday was selected to the 2018-19 All-NBA first team. He is the second player in franchise history to earn first-team honors, joining David Thompson who was selected in the 1976-77 and 1977-78 seasons. It is Jokic's first All-NBA selection.
Jokic earned 59 out of a possible 100 first-team votes, 38 second-team votes and two third-team votes for a total of 411 points, beating out Philadelphia's Joel Embiid (375). He is the first Serbian player to earn first-team honors.
Jokic, 24, was named to his first all-star team this past season. In the regular season, he averaged 20.1 points, 10.8 rebounds, and 7.3 assists, leading Denver its first playoff appearance since 2013. He shined in the postseason, improving his numbers to 25.1 points, 13.0 rebounds and 8.4 assists in 14 games.
Nikola Jokic (15) of the Denver Nuggets and Paul Millsap (4) prepare for the Portland Trail Blazers during the first quarter on Friday, May 3, 2019. The Denver Nuggets and the Portland Trailblazers faced off in game three of their second round NBA playoff series at the Moda Center in Portland.
Altitude dispute with Comcast keeps Nuggets, Avalanche games dark on Colorado's largest TV provider: Will fan apathy set in for title contenders?
Nuggets defend Malik Beasley amid trying season: "(He's) not going to fade on us"
Michael Porter Jr. needs to be Nuggets' second-best player, Charles Barkley says
Nuggets Mailbag: Could a trade disrupt Denver's great team chemistry?
Malik Beasley, Will Barton pour in season-highs in thriller over Warriors
He is the seventh Nuggets player to be selected to an All-NBA team. The list includes Thompson (two first-team honors), Carmelo Anthony (one second team, three third teams), Chauncey Billups (one third team), Alex English (three second-teams), Fat Lever (one second team) and Antonio McDyess (one third team).
Jokic is joined on the first team by Milwaukee forward Giannis Antetokounmpo, Houston guard James Harden, Golden State guard Stephen Curry, and Oklahoma City forward Paul George.
The second team consists of Embiid, Golden State forward Kevin Durant, Toronto forward Kawhi Leonard, Portland guard Damian Lillard and Boston guard Kyrie Irving.
Making up the third team are Oklahoma City guard Russell Westbrook, Detroit forward Blake Griffin, Lakers forward LeBron James, Utah center Rudy Gobert and Charlotte guard Kemba Walker.
2018-19 All-NBA teams
2018-19 ALL-NBA FIRST TEAM
Pos Player Team 1st 2nd 3rd Total
F Giannis Antetokounmpo Bucks 100 – – 500
G James Harden Rockets 100 – – 500
G Stephen Curry Warriors 91 9 – 482
F Paul George Thunder 71 25 3 433
C Nikola Jokic Nuggets 59 38 2 411
2018-19 ALL-NBA SECOND TEAM
C Joel Embiid 76ers 40 57 4 375
F Kevin Durant Warriors 29 71 – 358
G Damian Lillard Trail Blazers 8 87 5 306
F Kawhi Leonard Raptors – 73 23 242
G Kyrie Irving Celtics – 52 39 195
G Russell Westbrook Thunder 1 43 44 178
F Blake Griffin Pistons – 13 76 115
F LeBron James Lakers – 13 72 111
C Rudy Gobert Jazz 1 5 69 89
G Kemba Walker Hornets – 4 39 51
Others receiving votes: Bradley Beal, Wizards 34; Klay Thompson, Warriors 27; Karl-Anthony Towns, Timberwolves 20; LaMarcus Aldridge, Spurs 17; Danilo Gallinari, Clippers 7; Ben Simmons, 76ers 7; Ben Conley, Grizzlies 4; Donovan Mitchell, Jazz 4; Pascal Siakam, Raptors 4; Nikola Vucevic, Magic 4; DeMar DeRozan, Spurs 3; Luka Doncic, Mavericks 3; Andre Drummond, Pistons 3; D'Angelo Russell, Nets 3; Dwyane Wade, Heat 3; Tobias Harris, 76ers 2; Marvin Bagley III, Kings 1; Devin Booker, Suns 1; Anthony Davis, Pelicans 1; Eric Gordon, Rockets 1; Jrue Holiday, Pelicans 1; Kyle Lowry, Raptors 1; Domantas Sabonis, Pacers 1; Myles Turner, Pacers 1; Lou Williams, Clippers 1.
More Nuggets News
Joe Nguyen
Main daytime sports producer for The Denver Post. Previously he was the online prep sports editor. Prior to that, he covered Adams County and Aurora in the YourHub section. He also writes about beer, professional wrestling and video games.
Follow Joe Nguyen	thatjoenguyen Follow Joe Nguyen	@JoeNguyen
More in Denver Nuggets
Exactly a week ago, two days after Malik Beasley's clinical closeout helped seal Denver's thrilling win in Dallas, Nuggets coach Michael Malone couldn't deny the obvious any longer.
A common truth among Colorado sports fans is that the end of Broncos season signals the true beginning of Avalanche and Nuggets season.
Nuggets beat writer Mike Singer answers questions from readers, including one worried about a potential trade ruining the team chemistry that has developed the past three seasons.
Denver's depth had been lauded all year. On Thursday, with three starters out due to injury, it shined.

redpajama_set_name: RedPajamaCommonCrawl


Stop worrying! Get answers now from real Australian fortune-tellers!
Our fortune-tellers here at ESO.TV have proven to be the best in Australia!
Do you have questions about Love, Relationships, Money, Health, your Family or your Destiny?
Our gifted and caring phone fortune-tellers have the answers you are looking for! Our experts use astrology, tarot, numerology, rune stones, crystals, angel readings and other skills to reveal what is ahead of you!
Call our gifted fortune-tellers NOW!


With old DDR3 memory modules fast-approaching obsolescence among high-end PC systems, gamers and overclockers are always on the lookout to find even faster and more powerful memory solutions. To answer this need, ADATA is proud to present the very best in DDR4 memory - the new XPG Z1. Inside a computer gamer's display rig, the eye-catching design of XPG Z1 easily draws you in for a closer envious look. But its red-hot metallic casing means more than just good looks. With speeds up to 2800MHz, the XPG Z1 delivers lightning-fast computer memory performance.
Designed to satisfy high efficiency requirement from professional desktop and computer games, the DRAM Module offers DDR4 memory and 2800 MHz high-speed operation on hardware. Its outlook merits efforts to look fashionable and attractive. Amor-Inspired style builds sense of future, while red metal external components not only shows high performance but also enables easy module set plug-in and out as well as chip heat radiation.


❶As we have mentioned above, we can cope with all types of homework assignments.
Quality academic help from professional paper & essay writing service. Best team of research writers makes best orders for students. WRITE MY PAPER FOR ME - WE CARE ABOUT QUALITY OF OUR SERVICE To write a long word essay of any type and due Read more. Expert Tips on How to Write a Term Paper. Submitting a .
Professional typed paper writers - Proposals and resumes at most affordable prices. Stop getting bad marks with these custom research paper recommendations get a % original, non-plagiarized paper you could only imagine about in our paper writing .
Professional typed paper writers - No more fails with our high class essay services. witness the benefits of expert custom writing assistance available here All sorts of academic writings & custom papers. We believe that only a professional writer can craft academic content that's nothing short of perfect and brings the best results. Every online essay writer in our network has a strong track record of providing research and writing assistance to students. With Grademiners, you can get any type of paper done to your specifications. Whether.
Consider our essays and paper writing services, whenever you are assigned to work on your academic assignments. Certainly, this is where your academic papers will be worked on properly, due to the fact that it is only here that you can meet the most qualified writers and researchers. We specialize in providing professional writing services. Students have an abundance of essays and research papers to write, so there is nothing unusual in the fact that professional writers mostly deal with these types of assignments.


text:
http://amongthereckless.wordpress.com
Soccer

Dance

The New Yorker

Guitars

Gossip

Models

Fashion
u2fan1978
Gelling
Amie replied to Sierra's topic in Actresses
I love her pose. Defines her curves nicely I just read some detailed finale spoilers and I'm fucking pissed and convinced the writers hate both Blake AND S. On a positive note, it did save me 45 mins of my life
^Agree with you re: her acting. Much better than GG deserves. Anyway here's the trailer for Hick:
^Blake really can never win with that troll (love that name choice!). She really doesn't know anything about Blake hence her need to believe all the B-S she spews. And I just LOVE how we Blake fans know to take whatever she says and just believe the exact opposite of that lol. Blake has been doing much more stellar work than her character or the show deserves for the past couple of episodes, her last two scenes in the last episode were just heartbreaking. It seems like she personally offended the writers because they are taking her to such a dark and bitter place and they've kinda isolated her from the rest of the other characters. While it has afforded Blake to do some stellar work, I still maintain that the sooner the show is canceled, the better.
Don't worry yourself Yamile. Like we said, some people are just getting bitter because Blake is successful and smart. And it's never going to get any better as she keeps climbing upwards. It's something they just have to get used to while we the fans keep enjoying her success.
Agreed. It's gotten really really good reception from the film blogs and y'know people who actually get paid to evaluate these things for a living. Even twitter has been abuzz, in a positive way, in response to the trailer. I'm pretty sure this movie is going to make bank come summer, and I can't freaking wait! Or... we could just start a whole harem ? ...
Ikr? Like outside of GG, Blake has proven herself to be more talented and with more range than Leighton. Funny how they need to keep attacking Blake to make themselves feel better, whatever makes them sleep at night tbh.
She's probably just hyping up her performance so she can say "she wasn't that good" and "her PR team blah blah" when the movie comes out. I think she did that with The Town. She would Did you read her liveblog today? (I know, I know). I was just like throughout. Those people really are despicable to go as far as to wish failure on someone.
Haha, I receive Arya. Right back atcha! hugs
New Savages stuff:
No problem YAMILE. Blake looks beautiful
Lol Arya. May the odds be in your favor that you bump into her in Utah Trust me, I know that feeling about wanting to be like 'in yo face!' kinda like when she got the Soderbergh role at first (boy was that delicious) but you know the haters wont be satisfied until she's down and out of the town. They will never acknowledge anything good about that but it's okay because Blake will keep showing them up starting off with their leader, Lainey. I just love how Blake keeps proving her wrong every single time . They try to ignore any positive news about Blake and rather rely on rumors lol. They are so pathetic and it's best to ignore them, or beat them at their own game if you can. That Blake is successful gets them sooo mad and we'll be there down the line, however many years it takes, feeling smug and justified when she gets her first Golden Globe, Screen Actor's Guild, and dare I say, Oscar nomination? The way she's working and choosing her roles wisely now and getting better with each role, it's only a matter of time before she gets there. And don't worry, rant if you need to. There's always a listening ear here and enough of us to assure you that it's gonna be okay. Lol I know what you mean about your family, my roommate teases me about Blake and tries to get me riled up every time.
Arya, I totally get what you're saying. Believe me, I know the hardest part for us Blake fans is the waiting and waiting for new roles we can celebrate and look forward to. I just want to remind you of what Blake said herself in last month's ELLE issue: I'm a person that takes time with everything I do. And if I make a decision, it's because I'm incredibly confident in it. I'm not a rash person. I really like to live by delayed gratification. And also in this other interview: ...Being so beautiful why you are not starring in romantic comedies? Blake : Roles of students from UES aren't interesting for me now. I choose roles which are completely different from my role in GG. This is my principal position. I have a ton of offers to play in comedies, but I more likely say yes to a conflicting role in a ambiguous film. It gives more perspective into her selection process. If there's one thing we should know by being fans of Blake, it's to be pleasantly surprised by her. She expects the best for herself and her career and she wouldn't settle for anything less. After all, like Halolulu pointed out, she's spent every weekend since the first week of October with Ryan and yet she still surprised us by getting cast as the lead in Soderbergh movie (however that turned out). She only auditions and considers scripts and parts she's passionate about. She's doing a lot of stuff behind the scenes (Penn even commended her for it in an interview) and working incredibly hard, it's just that we can't see it now and yes, it makes us impatient. Coming from a background like GG, there's the temptation for her to take a lot of crap and trust me when I say we could have seen her take the lead roles in many bad movies but she understands that she has to establish herself as a talent and a force especially because she's so pretty and people would be willing to write her off because of her looks. She could very easily go the Katherine Heigl / Jennifer Aniston / Kristen Bell rom-com route, and get a lot of money and projects from that but she understands that once she goes down that path of fluff, that's it for her. It would be hard to convince people she's nothing more than a rom-com mediocre actress. At the same time, there are so many up and coming young actresses fighting for a place as future superstars and so it's gonna be hard for her, again back to Gossip Girl which doesn't help matters at all. But she takes her parts and delivers every time, like she's going to for Savages. Do you know why people actually hate her the most? Because she's not content being mediocre and challenges herself and tussles with A-listers and Oscar nominees for roles. Who was took the Glinda part in Oz that Blake was considering last year? Michelle Williams, 3-time Oscar nominee. Who stole the Soderbergh role from Blake? Rooney Mara, recent Oscar nominee. Who was she tussling with for parts in The Silver Linings Playbook, The Great Gatsby and The Dark Knight Rises? Natalie Portman, Carey Mulligan, Keira Knightley, Rachel Weisz, Jennifer Lawrence etc. Which directors is she auditioning for? Auteurs like Christopher Nolan, Darren Aronofsky, Steven Soderbergh, Baz Luhrmann, Oliver Stone, Sam Raimi, Ben Affleck (who is WB's golden boy right now) etc. And they are taking notice and keeping her in mind - David O. Russell considers her a friend. Even the head of Warner Bros. (which is like the 'big boy' studio) is a fan of her talents. Don't underestimate the extent to which GG limits her too, she can't take or even be considered for some roles because of GG's filming schedule. All I'm saying is be patient. Blake is going to surprise us as she usually does. And also accept that it might take time, she isn't going to sign off on stuff that won't help her in the long run. Who knows she might take a break this summer if she doesn't get any projects worthy of her time rather than working just to work? She's talked about how she likes to travel so she could work on her own character too, which is equally important. And I totally agree with you that she probably doesn't like news of her auditions to come out until she gets the role seeing as how people were savaging her in 2010 for even deigning to audition with the girls I listed above. Just be patient Arya, Blake doesn't disappoint. Remember this time last year? With Lainey all but declaring that Blake was over and that the 'buzz' had worn off? And then less than a week later, we got a triple whammy of roles: Oz, Savages and Hick? I didn't even intend to write this long lol. I tend to get long-winded . I do want to add one last thing that I totally agree that Savages is crucial for her, but from all indications from haters and viewers alike, she totally and completely delivers so that's at least something to look forward to. And Hick? Despite the negative reviews for the movie she, Eddie, and Chloe have been named as bright spots in the movie. I understand the gratification of seeing her on the big screen, but we only want to see the best of her and for that, we'll have to take it one step at a time. Oh and welcome EternalMagic


I decided to sit and talk a while with one of my best friends. She served 11 years with me during the18 years I was incarcerated.
We were like sisters and are very privileged to have had the opportunity to preserve our friendship.
When I came home I thought I was going to get a job right away, regain custody of my children and rebuild my bond with them. I was sadly mistaken.
It took two months to get a job after being turned down on numerous occasions due to an inability to pass the background check.
I already had custody of my youngest son who was conceived and delivered while I was incarcerated. I decided to take my son and relocate to Richmond, Virginia because I had a job opportunity there.
My new life there consisted of a job as an administrative assistant for a tax accounting firm. I met someone, fell in love and got pregnant.
Come to find out my boss was stealing money. She got audited, her company got shut down, and I was out of a job immediately. The guy I fell in love turned out to be a jerk, and I came back home to Washington, DC.
I had my son with me and I was pregnant with my baby boy at this point. I still had to fight tooth and nail for my two oldest children who were living in New York with their grandparents.
I remember those long road trips back and forth to court in New York, crying my eyes out. I couldn't believe I had to fight so hard for my own children.
It took a year before I was granted full custody of my kids. At that point, I was able to obtain my own apartment and I had a temporary job at District of Columbia Auditing. The company wanted to hire me permanently, but after the extensive background check I was fired on the spot.
I ended up with a part-time job at Shopper's Food Warehouse, while attempting to provide for three children. And, I was pregnant. I had to be placed on bed rest and was subsequently fired due to my high-risk pregnancy.
It's been 7 years now, and thankfully I have maintained custody of my children. I was recently hired with the District Government.
I am continuing to rebuild my bond with my children who initially were angry, bitter and hostile. When I first came home my children were not very receptive to me, and it was a struggle to get to know one another and maintain stability.
Tagged Jobs After Prison, reintegration. Bookmark the permalink.


On January 17th Lilian and her husband Luis Gordillo brought their four-year-old daughter, Natalie, to the doctor's office for a quick check up. Then the couple went to their immigration appointment. Lilian was in the process of becoming a lawful permanent resident, as the wife of a United States citizen and the mother of two children, also United States citizens. Brought to this country at the age of three, Lilian was working to change her status from undocumented to documented, following the legal process laid out for her by immigration officials and lawyers.
Lilian and Luis brought a photo album and other papers with them, documenting their life together: their relationship which began in high school, the birth of their two children, holidays, birthdays, marriage photos.
And then they called Lilian in.
"I think it was maybe a five minute interview," said Lilian. The immigration officer asked her basic questions.
Lilian was told she could call her lawyer when she reached the immigration office in Warwick.
"Is there anything you want to give him?" asked the immigration officers.
After being processed in Warwick, which included photos and fingerprinting, Lilian was finally granted a phone call. She called Luis.
"Don't sign anything if you don't understand what it is," said Luis.
Lilian's attorney went to the immigration office to try to get her released. Lilian was not allowed to see her lawyer.
She was shackled for a second time that day and sent to Suffolk County House of Correction at South Bay where she was processed again. Then she was transferred to the ICE Unit in the prison. None of the officers have any answers to any questions the inmates might have, says Lilian.
"The ladies in the ICE Unit kept asking me, 'Why are you here?'" said Lilian. "Even the [correctional] officers were asking, 'Why are you ICE? Why are you here?' No one understood.
"Every time I got moved they would say to me, how are you ICE? Is it drugs? And I was like, no, it's not. And that's a problem because everyone thinks that when you're detained you're detained because of drugs.
The caseworker helped Lilian make a phone call.
Over the weeks Lilian spent in prison she was put through orientation. "They make you go through the steps that you would if you were detained under other reasons," said Lilian. "So we did what they call orientation and what they call classes. We had to…" Lilian pauses, because this is difficult for her.
Lilian was told that she had to watch the videos, participate in classes, be part of the process, or be put in solitary confinement.
After her orientation, Lilian was visited by caseworkers who offer detainees and inmates the kind of help they might need to make their lives better once released. The caseworkers don't offer immigration help. They offer help for addiction, domestic abuse etc.
"I don't have those kind of problems," said Lilian. "I have immigration problems. You can't help me, but you're forcing me to sit through these classes… At the end of orientation they make us pick these classes because they want us to be 'productive.' They want us to not sit in our units and they want us to get out.
"Every time I would say something or disagree with something, it was automatic – You need to do what we say or we're going to put you in solitary," said Lilian.
"The other ladies that were there, [some] didn't speak English and they would ask me to help them and I would help them and say, 'It's not going through. You can't call your lawyer.' And they would ask me why and I would say, 'You know what, I don't know, but we can ask the officer that's in charge of our unit. And when we would ask our officer she would say, 'Oh, I don't know why not. You just have to bring that up with your caseworker. Fill out a form and your caseworker will see you.
Lilian and Luis did what they could for the other detainees in the ICE Unit.
"I remember on occasion I would call Luis and say 'Hey, so-and-so needs to call their family and she hasn't been able to. Can you call them and tell them that she needs to talk to them?' And he did that for a few of the ladies in there.
"Everyone thinks that when you get detained by ICE its because it's either drugs or violence or crime, like it has to be crime related," said Lilian. "But it's not true, because – I've never…" Lilian searches for the words. "Like I said: We would take our daughter to school. We would pick her up. We would take our children to the park. We would take them to the library. They had a schedule. They had some form of normalcy. There was never anything wrong – anything that would lead to a crime.
Lilian was release on February 13th. She had chocolate and strawberries for Valentine's Day with her family. She has been granted a 90 day stay of deportation by United States Immigration and Customs Enforcement (ICE).


text:
Q: magnetic effect to attach window dialog or frame to another I have to windows (JFrame and non-modal JDialog) and I want to attach the JDialog to the JFrame, so that when I move the JFrame the JDialog is also moved.
The synchronous movement itself is NOT the problem. I realized it via ComponentListener.componentMoved(.).
But the attachment should not be fixed. The user should have the possibility to detach the JDialog by moving it away from JFrame. Only when JDialog is placed directly to the JFrame border it should be attached.
To help the user place the JDialog exactly next to the JFrame (attach it) I want to implement a "magnetic effect": If the JDialog is moved nearer than 10px to the JFrames border the JDialog should automatically be places exactly next to the JFrame.
Detecting this situation in ComponentListener.componentMoved(.) is also not the problem, but setting the new JDialog location:
When I set the new location by JDialog.setLocation(.) first the JDialog is placed correctly. But when I finish the dialog dragging (release the mouse button) the JDialog is placed back at the prior location (10px away from JFrame).
I think this is because at the end of the drag, "the system" also calls setLocation(.).
Any ideas how I can prevent this behavior? E.g. remove any following mouse movement or mouse released events from event queue?

A: I was interested i this question and decided to make my own little program that will create an main frame/dock and other dockable containers. These containers will follow the main frame in order to remain in their positions.
So although answered I'd like to share my example.
As for why the OPs code was not working perfectly I think it was due to the fact componentMoved would refire on each move thus something went wrong during the movings of dockables.
Here is a small example right now you can add dockables to North, East, South and/or West of main frame. The way the dockables keep in their location is managed by layouts like - Sticky, Magnetic and Follow Layout.
Sticky Layout moves with main frame, whereas Follow calls dockables to move into main frames position and Magnetic does as the name assumes attracts all dockables within a certain distance it should be noted though each dockable i.e east is only attracted to the main dock if its within the given distance from its specified final/docked point (eastly top of main frame) on the main frame.
It uses a ComponentAdapter/Listener and Swing Timer with Component#setLocation(int x,int y) to achieve the outcome.
The below screen shot is of 4 dockables (north, west, east and south) the center screen is the main frame. The Docker class has a getDockToolbar which allows us the ability to add a toolbar which has prebuilt dock and un-dock buttons.

Here is the code (the below shows Magnetic layout):
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.util.HashMap;
import java.util.Map;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.Timer;

public class MagneticFrameAndDialog {

    public MagneticFrameAndDialog() {
        createAndShowGUI();

    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new MagneticFrameAndDialog();
            }
        });
    }

    private void createAndShowGUI() {
        JFrame frame = new JFrame("JFrame (The Docks)");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        Docker docker = new Docker();
        docker.registerDock(frame);
        docker.setLayout(Docker.MAGNETIC_LAYOUT);
        //docker.setMagneticFieldSize(250);//default is 150
        docker.setComponentMovedReactTime(50);//default is 100

        JDialog d1 = createAndShowDialog(300, 300);
        d1.setTitle("East Dockable");
        JDialog d2 = createAndShowDialog(300, 100);
        d2.setTitle("South Dockable");
        JDialog d3 = createAndShowDialog(100, 300);
        d3.setTitle("West Dockable");
        JDialog d4 = createAndShowDialog(300, 100);
        d4.setTitle("North Dockable");

        docker.registerDockee(d1, Docker.EAST_DOCKED);
        docker.registerDockee(d2, Docker.SOUTH_DOCKED);
        docker.registerDockee(d3, Docker.WEST_DOCKED);
        docker.registerDockee(d4, Docker.NORTH_DOCKED);

        frame.add(docker.getDockToolbar(), BorderLayout.SOUTH);

        frame.pack();
        frame.setVisible(true);
    }

    private JDialog createAndShowDialog(final int w, final int h) {
        JDialog dialog = new JDialog() {
            @Override
            public Dimension getPreferredSize() {
                return new Dimension(w, h);
            }
        };
        dialog.setTitle("Dockable Dialog");
        dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
        dialog.pack();
        dialog.setVisible(true);
        return dialog;
    }
}

class Docker {

    public static final String NORTH_DOCKED = "dock north", SOUTH_DOCKED = "dock south", WEST_DOCKED = " dock west", EAST_DOCKED = "dock east";
    public static final String FOLLOW_LAYOUT = "layout follow", STICKY_LAYOUT = "layout sticky", MAGNETIC_LAYOUT = "layout magnetic";
    private HashMap<Component, String> dockees = new HashMap<>();
    private Timer dockeeMoveTimer;
    private ComponentAdapter caDock, caDockee;
    private Component dock;
    private String layout = STICKY_LAYOUT;
    private int MAGNETIC_FIELD_SIZE = 150, movedReactTime = 100;

    public Docker() {
        initTimers();
        initComponentAdapters();
    }

    public void setLayout(String layout) {
        this.layout = layout;
    }

    void setComponentMovedReactTime(int milis) {
        movedReactTime = milis;
    }

    private void initComponentAdapters() {
        caDockee = new ComponentAdapter() {
            @Override
            public void componentMoved(ComponentEvent ce) {
                super.componentMoved(ce);
                if (layout.equals(MAGNETIC_LAYOUT)) {
                    createDockeeMovedTimer();
                } else {
                    iterateDockables();
                }
            }

            private void createDockeeMovedTimer() {
                if (dockeeMoveTimer.isRunning()) {
                    dockeeMoveTimer.restart();
                } else {
                    dockeeMoveTimer.start();
                }
            }
        };
        caDock = new ComponentAdapter() {
            @Override
            public void componentMoved(ComponentEvent ce) {
                super.componentMoved(ce);
                iterateDockables();
            }

            @Override
            public void componentResized(ComponentEvent ce) {
                super.componentResized(ce);
                iterateDockables();
            }
        };
    }

    private void initTimers() {
        dockeeMoveTimer = new Timer(movedReactTime, new AbstractAction() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                iterateDockables();
            }
        });
        dockeeMoveTimer.setRepeats(false);
    }

    private void iterateDockables() {
        //System.out.println("Dock will call for Dockees to come");
        for (Map.Entry<Component, String> entry : dockees.entrySet()) {
            Component component = entry.getKey();
            String pos = entry.getValue();
            if (!isDocked(component, pos)) {
                dock(component, pos);
            }
        }
    }

    void registerDock(Component dock) {
        this.dock = dock;
        dock.addComponentListener(caDock);
    }

    void registerDockee(Component dockee, String pos) {
        dockee.addComponentListener(caDockee);
        dockees.put(dockee, pos);
        caDock.componentResized(new ComponentEvent(dock, 1));//not sure about the int but w dont use it so its fine for now
    }

    void deregisterDockee(Component dockee) {
        dockee.removeComponentListener(caDockee);
        dockees.remove(dockee);
    }

    void setMagneticFieldSize(int sizeInPixels) {
        MAGNETIC_FIELD_SIZE = sizeInPixels;
    }

    private boolean isDocked(Component comp, String pos) {
        switch (pos) {
            case EAST_DOCKED:
                int eastDockedX = dock.getX() + dock.getWidth();
                int eastDockedY = dock.getY();
                if (layout.equals(MAGNETIC_LAYOUT)) {
                    if (comp.getLocation().distance(new Point(eastDockedX, eastDockedY)) <= MAGNETIC_FIELD_SIZE) {
                        return false;
                    } else {
                        return true;
                    }
                } else {
                    if (comp.getX() == eastDockedX && comp.getY() == eastDockedY) {
                        // System.out.println("is eastly docked");
                        return true;
                    }
                }
                break;
            case SOUTH_DOCKED:
                int southDockedX = dock.getX();
                int southDockedY = dock.getY() + dock.getHeight();
                if (layout.equals(MAGNETIC_LAYOUT)) {
                    if (comp.getLocation().distance(new Point(southDockedX, southDockedY)) <= MAGNETIC_FIELD_SIZE) {
                        return false;
                    } else {
                        return true;
                    }
                } else {
                    if (comp.getX() == southDockedX && comp.getY() == southDockedY) {
                        // System.out.println("is southly docked");
                        return true;
                    }
                }
                break;
            case WEST_DOCKED:
                int westDockedX = dock.getX() - comp.getWidth();
                int westDockedY = dock.getY();
                if (layout.equals(MAGNETIC_LAYOUT)) {
                    if (comp.getLocation().distance(new Point(westDockedX + comp.getWidth(), westDockedY)) <= MAGNETIC_FIELD_SIZE) {
                        return false;
                    } else {
                        return true;
                    }
                } else {
                    if (comp.getX() == westDockedX && comp.getY() == westDockedY) {
                        // System.out.println("is southly docked");
                        return true;
                    }
                }
                break;
            case NORTH_DOCKED:
                int northDockedX = dock.getX() + comp.getHeight();
                int northDockedY = dock.getY() - comp.getHeight();
                if (layout.equals(MAGNETIC_LAYOUT)) {
                    if (comp.getLocation().distance(new Point(northDockedX - comp.getHeight(), northDockedY + comp.getHeight())) <= MAGNETIC_FIELD_SIZE) {
                        return false;
                    } else {
                        return true;
                    }
                } else {
                    if (comp.getX() == northDockedX && comp.getY() == northDockedY) {
                        // System.out.println("is southly docked");
                        return true;
                    }
                }
                break;
        }
        return false;
    }
    private Timer eastTimer = null, southTimer = null, westTimer = null, northTimer = null;

    private void dock(final Component comp, String pos) {
        //System.out.println("Snapping Dockee back to the dock");
        switch (pos) {
            case EAST_DOCKED:
                int eastDockedX = dock.getX() + dock.getWidth();
                int eastDockedY = dock.getY();
                if (eastTimer == null) {
                    eastTimer = getTimer(comp, eastDockedX, eastDockedY);
                    eastTimer.start();
                } else {
                    if (!eastTimer.isRunning()) {
                        eastTimer = getTimer(comp, eastDockedX, eastDockedY);
                        eastTimer.start();
                    }
                }
                break;
            case SOUTH_DOCKED:
                int southDockedX = dock.getX();
                int southDockedY = dock.getY() + dock.getHeight();
                if (southTimer == null) {
                    southTimer = getTimer(comp, southDockedX, southDockedY);
                    southTimer.start();
                } else {
                    if (!southTimer.isRunning()) {
                        southTimer = getTimer(comp, southDockedX, southDockedY);
                        southTimer.start();
                    }
                }
                break;
            case WEST_DOCKED:
                int westDockedX = dock.getX() - comp.getWidth();
                int westDockedY = dock.getY();
                if (westTimer == null) {
                    westTimer = getTimer(comp, westDockedX, westDockedY);
                    westTimer.start();
                } else {
                    if (!westTimer.isRunning()) {
                        westTimer = getTimer(comp, westDockedX, westDockedY);
                        westTimer.start();
                    }
                }
                break;
            case NORTH_DOCKED:
                int northDockedX = dock.getX();
                int northDockedY = dock.getY() - comp.getHeight();
                if (northTimer == null) {
                    northTimer = getTimer(comp, northDockedX, northDockedY);
                    northTimer.start();
                } else {
                    if (!northTimer.isRunning()) {
                        northTimer = getTimer(comp, northDockedX, northDockedY);
                        northTimer.start();
                    }
                }
                break;
        }
    }

    private Timer getTimer(final Component comp, int finalX, int finalY) {
        Timer t = null;
        switch (layout) {
            case STICKY_LAYOUT:
                t = stickyDockableTimer(comp, finalX, finalY);
                break;
            case FOLLOW_LAYOUT:
                t = followDockableTimer(comp, finalX, finalY);
                break;
            case MAGNETIC_LAYOUT:
                t = followDockableTimer(comp, finalX, finalY);
                break;
        }
        return t;
    }

    private Timer followDockableTimer(final Component comp, final int finalX, final int finalY) {
        Timer t = new Timer(1, new AbstractAction() {
            int INCREMENT = 1, DECREMENT = 1;
            int x = comp.getX(), y = comp.getY();

            @Override
            public void actionPerformed(ActionEvent ae) {
                //System.out.println(finalX + "," + finalY);
                if (x < finalX) {
                    x += INCREMENT;
                } else if (x > finalX) {
                    x -= DECREMENT;
                }
                if (y < finalY) {
                    y += INCREMENT;
                } else if (y > finalY) {
                    y -= DECREMENT;
                }
                comp.setLocation(x, y);
                if (x == finalX && y == finalY) {
                    if (comp instanceof Window) {
                        ((Window) comp).toFront();
                    }
                    ((Timer) ae.getSource()).stop();
                }
            }
        });
        return t;
    }

    public JPanel getDockToolbar() {
        JPanel panel = new JPanel();
        for (Map.Entry<Component, String> entry : dockees.entrySet()) {
            final Component component = entry.getKey();
            String pos = entry.getValue();
            Docker.MyButton jtb = new Docker.MyButton("un-dock" + pos.replace("dock", ""), component, pos);
            panel.add(jtb);
            jtb.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent ae) {
                    Docker.MyButton jtb = (Docker.MyButton) ae.getSource();
                    String tmp = jtb.getText();
                    if (tmp.contains("un-dock")) {
                        jtb.setText(tmp.replace("un-dock", "dock"));
                        deregisterDockee(jtb.getComponent());
                    } else {
                        jtb.setText(tmp.replace("dock", "un-dock"));
                        registerDockee(jtb.getComponent(), jtb.getDockablePosition());
                    }
                }
            });
        }
        return panel;
    }

    private Timer stickyDockableTimer(final Component comp, final int finalX, final int finalY) {
        Timer t = new Timer(1, new AbstractAction() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                comp.setLocation(finalX, finalY);
            }
        });
        t.setRepeats(false);
        return t;
    }

    private class MyButton extends JButton {

        private final Component c;
        private final String pos;

        public MyButton(String text, Component c, String pos) {
            super(text);
            this.c = c;
            this.pos = pos;
        }

        public Component getComponent() {
            return c;
        }

        public String getDockablePosition() {
            return pos;
        }
    }
}

A: I posted the upper mentioned question after hours of ineffective searching and trial and error.
And after some more minutes of searching I found the solution... D'oh!
The trick is not to set the location of the dialog directly by JDialog.setLocation(.) during ComponentListener.componentMoved(.), but simply modify the mouse position (which is still in drag mode!):
// Example ONLY for magnetic effect on EAST border of JFrame!!
int dockDistE = ...; // distance on east border of JFrame to west border of JDialog
...
try {
  // determine mouse location
  Point mouseLoc = MouseInfo.getPointerInfo().getLocation();
  Robot robot = new Robot();
  // move mouse to west exactly the remaining distance to JFrame
  robot.mouseMove(mouseLoc.x-dockDistE, mouseLoc.y);
  // release mouse button to automatically finish dragging
  robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
} catch (AWTException e1) {
  // TODO Auto-generated catch block
  e1.printStackTrace();
}

Modifying the mouse position results in an automatic window drag/move for the JDialog to the attach position.
Here you can find my complete DockingListener:
http://wald.intevation.org/scm/viewvc.php/trunk/schmitzm-core/src/main/java/de/schmitzm/swing/event/DockingListener.java?root=schmitzm&view=markup
There are no other dependencies than JDK (1.6).

A: I made a class called DockingManager that lets you dock Dialogs and Frames pseudo Winamp Style
It also lets you make different clusters and set magnetic levels to choose which frame drags the others)
package com.gsteren.docking;

import java.awt.Component;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.Timer;
import javax.swing.UIManager;

public class DockingManager {

    public static enum DockingMode {
        EAST, WEST, NORTH, SOUTH, NONE
    }

    int magneticDistance = 20;

    public static Map<Component, DockingApplier> monitoredComponents = new HashMap<Component, DockingApplier>();

    /**
     * Para saber cual es el último Component movido por el usuario.
     */
    private static DockingApplier focusedApplier;

    public void registerComponent(Component component) {
        this.registerComponent(component, 1);
    }

    public void registerComponent(Component component, int magneticLevel) {
        DockingApplier applier = new DockingApplier(component, magneticLevel);
        monitoredComponents.put(component, applier);
    }

    /**
     * Indica el grupo completo de componentes pegados al que pertenece un
     * componente.
     *
     * @author Guillermo
     *
     */
    protected class DockingApplierCluster {
        Set<DockingApplier> appliers = new HashSet<DockingApplier>();
        DockingApplier leader = null;

        public DockingApplierCluster(DockingApplier applier) {
            this.addToCluster(applier);
        }

        public DockingApplierCluster(Set<DockingApplier> appliers) {
            for (DockingApplier applier : appliers) {
                this.addToCluster(applier);
            }
        }

        public void addToCluster(DockingApplier applier) {
            appliers.add(applier);
            applier.setCluster(this);
            if (null == leader || applier.getMagneticLevel() < leader.getMagneticLevel()) {
                this.setLeader(applier);
            }
        }

        public int getSize() {
            return getAppliers().size();
        }

        public void mergeCluster(DockingApplierCluster cluster) {
            DockingApplierCluster bigCluster;
            DockingApplierCluster smallCluster;
            if (getSize() > cluster.getSize()) {
                bigCluster = this;
                smallCluster = cluster;
            } else {
                bigCluster = cluster;
                smallCluster = this;
            }
            for (DockingApplier applier : smallCluster.getAppliers()) {
                bigCluster.addToCluster(applier);
            }

        }

        public Set<DockingApplier> getAppliers() {
            return this.appliers;
        }

        /**
         * @return the leader
         */
        public DockingApplier getLeader() {
            return leader;
        }

        /**
         * @param leader
         *            the leader to set
         */
        public void setLeader(DockingApplier leader) {
            this.leader = leader;
        }

        public void remove(DockingApplier applier) {
            if (this.getAppliers().size() == 1) {
                /* No sacamos el único elemento */
                return;
            }

            this.getAppliers().remove(applier);

            if (this.leader == applier) {
                this.leader = findLeader();
            }

            /* Pude haber dividido en varios clusters */
            this.recalculateClustersAfterRemoval();
        }

        public void recalculateClustersAfterRemoval() {
            Set<DockingApplier> myAppliersCopy = new HashSet<DockingManager.DockingApplier>(getAppliers());
            Set<DockingApplier> visitedAppliers = new HashSet<DockingManager.DockingApplier>();
            for (DockingApplier applier : myAppliersCopy) {
                if (visitedAppliers.contains(applier)) {
                    continue;
                }
                Set<DockingApplier> newClusterComponents = findClusteredAppliers(applier);
                if (newClusterComponents.size() == myAppliersCopy.size()) {
                    /* No se dividieron los clusters */
                    return;
                }
                visitedAppliers.addAll(newClusterComponents);
                /* Creo un nuevo cluster, y le agrego los elementos */
                new DockingApplierCluster(newClusterComponents);
            }

        }

        /**
         * Devuelve todos los DockingAppliers anexos entre si.
         *
         * @param anApplier
         * @return
         */
        public Set<DockingApplier> findClusteredAppliers(DockingApplier anApplier) {
            return findClusteredAppliers(anApplier, new HashSet<DockingManager.DockingApplier>());
        }

        public Set<DockingApplier> findClusteredAppliers(DockingApplier anApplier, Set<DockingApplier> currentSet) {
            currentSet.add(anApplier);
            for (DockingApplier applier : anApplier.getAttachedComponents()) {
                if (currentSet.contains(applier)) {
                    continue;
                }
                currentSet.add(applier);
                currentSet.addAll(findClusteredAppliers(applier, currentSet));
            }
            return currentSet;
        }

        private DockingApplier findLeader() {
            DockingApplier leaderCandidate = null;
            for (DockingApplier applier : getAppliers()) {
                if (leaderCandidate == null || applier.getMagneticLevel() < leaderCandidate.getMagneticLevel()) {
                    leaderCandidate = applier;
                    if (applier.getMagneticLevel() == 1) {
                        /* Encontramos óptimo */
                        break;
                    }
                }
            }
            return leaderCandidate;
        }

    }

    protected class DockingApplier implements ComponentListener, FocusListener {

        private Component component = null;
        private DockingApplierCluster cluster;

        public DockingApplier(Component component, int magneticLevel) {
            this.component = component;
            this.cluster = new DockingApplierCluster(this);
            this.magneticLevel = magneticLevel;
            this.updateLastLocation();

            /*
             * Esto no es necesario ya que registerComponent es quien crea el
             * applier
             */
            if (!monitoredComponents.containsKey(component)) {
                monitoredComponents.put(component, this);
            }

            this.component.addComponentListener(this);
            this.component.addFocusListener(this);
            componentFinishedMovingDetector.setRepeats(false);
        }

        public void setCluster(DockingApplierCluster cluster) {
            this.cluster = cluster;
        }

        /**
         * @return the cluster
         */
        public DockingApplierCluster getCluster() {
            return cluster;
        }

        boolean isClusterLeader() {
            return getCluster().getLeader() == this;
        }

        /**
         * @return the magneticLevel
         */
        public Integer getMagneticLevel() {
            return magneticLevel;
        }

        /**
         * @param magneticLevel
         *            the magneticLevel to set
         */
        public void setMagneticLevel(Integer magneticLevel) {
            this.magneticLevel = magneticLevel;
        }

        /**
         * @return the isDocking
         */
        protected boolean isDocking() {
            return isDocking;
        }

        /**
         * @param isDocking
         *            the isDocking to set
         */
        protected void setDocking(boolean isDocking) {
            this.isDocking = isDocking;
        }

        /**
         * @return the attachedComponents
         */
        public Set<DockingApplier> getAttachedComponents() {
            return attachedComponents;
        }

        int northY;
        int southY;
        int westX;
        int eastX;

        public void recalculateBorderCoordinates() {
            Point compLoc = component.getLocation();
            Dimension compDim = component.getSize();
            northY = compLoc.y;
            southY = northY + compDim.height;
            westX = compLoc.x;
            eastX = westX + compDim.width;
        }

        public DockingMode calculateWhereToDock(DockingApplier other, int magneticDistance) {
            return calculateWhereToDock(this, other, magneticDistance);
        }

        /**
         * Indica si me debería lockearse con other
         *
         * @param me
         * @param other
         * @return
         */
        public DockingMode calculateWhereToDock(DockingApplier me, DockingApplier other, int magneticDistance) {

            /* Talvez innecesario */
            me.recalculateBorderCoordinates();
            other.recalculateBorderCoordinates();

            if (me.getAttachedComponents().contains(other)) {
                /* Ya estan conectados */
                return DockingMode.NONE;
            }

            int dockDistN = me.northY - other.southY;
            int dockDistS = other.northY - me.southY;
            int dockDistW = me.westX - other.eastX;
            int dockDistE = other.westX - me.eastX;

            if (dockDistN > 0 && magneticDistance > dockDistN && checkOverlappingEastWest(me, other)) {
                return DockingMode.NORTH;
            } else if (dockDistS > 0 && magneticDistance > dockDistS && checkOverlappingEastWest(me, other)) {
                return DockingMode.SOUTH;
            } else if (dockDistW > 0 && magneticDistance > dockDistW && checkOverlappingNorthSouth(me, other)) {
                return DockingMode.WEST;
            } else if (dockDistE > 0 && magneticDistance > dockDistE && checkOverlappingNorthSouth(me, other)) {
                return DockingMode.EAST;
            }
            return DockingMode.NONE;
        }

        /**
         * Checks whether components overlap in north/south direction.
         */
        protected boolean checkOverlappingEastWest(DockingApplier me, DockingApplier other) {
            return checkOverlappingEastWest_aux(me, other) || checkOverlappingEastWest_aux(other, me);
        }

        /**
         * Checks whether components overlap in east/west direction.
         */
        protected boolean checkOverlappingEastWest_aux(DockingApplier me, DockingApplier other) {
            return me.westX >= other.westX && me.westX <= other.eastX || me.eastX >= other.westX
                    && me.eastX <= other.eastX;
        }

        /**
         * Checks whether components overlap in north/south direction.
         */
        protected boolean checkOverlappingNorthSouth(DockingApplier me, DockingApplier other) {
            return checkOverlappingNorthSouth_aux(me, other) || checkOverlappingNorthSouth_aux(other, me);
        }

        /**
         * Checks whether components overlap in north/south direction.
         */
        protected boolean checkOverlappingNorthSouth_aux(DockingApplier me, DockingApplier other) {
            return me.northY >= other.northY && me.northY <= other.southY || me.southY >= other.northY
                    && me.southY <= other.southY;
        }

        public Point calculateDockedLocation(DockingApplier other, DockingMode mode) {
            return calculateDockedLocation(this, other, mode);
        }

        public Point calculateDockedLocation(DockingApplier me, DockingApplier other, DockingMode mode) {
            final Point meLoc = me.getComponent().getLocation();
            final Point otherLoc = other.getComponent().getLocation();
            final Dimension otherDim = other.getComponent().getSize();
            final Dimension meDim = me.getComponent().getSize();

            /* Posiciones relativas a other */
            switch (mode) {
            case NORTH:
                return new Point(meLoc.x, otherLoc.y + otherDim.height);
            case SOUTH:
                return new Point(meLoc.x, otherLoc.y - meDim.height);
            case WEST:
                return new Point(otherLoc.x + otherDim.width, meLoc.y);
            case EAST:
                return new Point(otherLoc.x - meDim.width, meLoc.y);
            default:
                return new Point(meLoc.x - otherLoc.x, meLoc.y);
            }
        }

        /**
         * Retrasa la accion a ejecutar en onComponentFinishedMoving hasta que
         * pasan 10ms sin que se mueva el componente afectado.
         */
        Timer componentFinishedMovingDetector = new Timer(300, new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                onComponentFinishedMoving();
            }
        });

        /**
         * Resetea el componentFinishedMovingDetector, se debe llamar cada vez
         * que se mueve o cambia el tamaño de la ventana.
         */
        protected void startComponentFinishedMovingDetector() {
            if (componentFinishedMovingDetector.isRunning()) {
                componentFinishedMovingDetector.restart();
            } else {
                componentFinishedMovingDetector.start();
            }
        }

        /* Mientras es menor, más probable es ser lider */
        int magneticLevel = 1;

        /* Indica si el componente esta en proceso de hacer dock */
        boolean isDocking = false;

        /* Para desconectarlos en resize */
        Set<DockingApplier> attachedComponents = new HashSet<DockingApplier>();
        /* Indica la posición del componente */
        private Point lastLocation;

        public boolean isDocked() {
            return getCluster().getSize() > 1;
        }

        /**
         * @return the component
         */
        protected Component getComponent() {
            return component;
        }

        public void componentResized(ComponentEvent e) {
            startComponentFinishedMovingDetector();
            this.recalculateBorderCoordinates();
            this.unDock();
        }

        public void componentMoved(ComponentEvent e) {

            this.recalculateBorderCoordinates();

            /*
             * Si el movimiento es consecuencia de hacer dock lo ignoro y marco
             * como que el docking se completó
             */
            if (this.isDocking()) {
                this.setDocking(false);
                return;
            }

            startComponentFinishedMovingDetector();

            if (this != focusedApplier) {
                return;
            }

            if (getCluster().getSize() == 1) {
                return;
            }

            if (!this.isClusterLeader()) {
                this.updateLastLocation();
                this.unDock();
                return;
            }

            positionAttachedComponents();

        }

        public void onComponentFinishedMoving() {
            this.recalculateBorderCoordinates();
            for (DockingApplier otherDockingApplier : getMonitoredComponents().values()) {
                if (otherDockingApplier == this) {
                    continue;
                }
                DockingMode dockMode = calculateWhereToDock(this, otherDockingApplier);
                if (!DockingMode.NONE.equals(dockMode)) {
                    System.out.println("shouldAttach");
                    this.dock(otherDockingApplier, dockMode);
                    this.updateLastLocation();
                } else {
                    System.out.println("shouldNotAttach");
                }
            }
        }

        public void setLocation(int x, int y) {
            this.setLocation(new Point(x, y));
        }

        public void setLocation(Point location) {
            this.getComponent().removeComponentListener(this);
            this.getComponent().setLocation(location);
            this.setLastLocation(location);
            this.getComponent().addComponentListener(this);
        }

        private void setLastLocation(Point location) {
            this.lastLocation = location;
        }

        public Point getLocation() {
            return this.getComponent().getLocation();
        }

        /**
         * @return the lastLocation
         */
        public Point getLastLocation() {
            return lastLocation;
        }

        protected void dock(DockingApplier otherDockingApplier, DockingMode dockMode) {
            this.setDocking(true);
            Point dockInfo = this.calculateDockedLocation(otherDockingApplier, dockMode);
            this.setLocation(dockInfo.x, dockInfo.y);
            this.bindAppliers(otherDockingApplier);
            /* Uno los clusters */
            otherDockingApplier.getCluster().mergeCluster(this.getCluster());
        }

        public void bindAppliers(DockingApplier otherDockingApplier) {
            this.getAttachedComponents().add(otherDockingApplier);
            otherDockingApplier.getAttachedComponents().add(this);
        }

        public void unDock() {
            if (this.getCluster().getSize() == 1) {
                return;
            }
            /*
             * Primero lo quito de sus vecinos, luego del cluster, el orden es
             * importante para el calculo de clusters en caso de división.
             */
            Set<DockingApplier> attachedComponentsCopy = new HashSet<DockingManager.DockingApplier>(
                    this.getAttachedComponents());
            for (DockingApplier applier : attachedComponentsCopy) {
                this.unbind(applier);
            }

            this.getCluster().remove(this);
            this.setCluster(new DockingApplierCluster(this));
        }

        public void unbind(DockingApplier dockingApplier) {
            this.getAttachedComponents().remove(dockingApplier);
            dockingApplier.getAttachedComponents().remove(this);
        }

        private DockingMode calculateWhereToDock(DockingApplier component, DockingApplier otherDockingApplier) {
            return this.calculateWhereToDock(otherDockingApplier, magneticDistance);
        }

        public void componentShown(ComponentEvent e) {
            getMonitoredComponents().get(component).recalculateBorderCoordinates();
            // positionAttachedComponents(e);
        }

        public void componentHidden(ComponentEvent e) {
            getMonitoredComponents().get(component).recalculateBorderCoordinates();
            // positionAttachedComponents(e);
        }

        private void positionAttachedComponents() {

            /* El lider del cluster debe arrastrar a los otros componentes */
            Point currentLocation = getComponent().getLocation();
            int xDiff = currentLocation.x - getLastLocation().x;
            int yDiff = currentLocation.y - getLastLocation().y;

            if (xDiff == 0 && yDiff == 0) {
                return;
            }

            this.updateLastLocation();

            for (DockingApplier otherApplier : getCluster().getAppliers()) {
                if (otherApplier == this) {
                    continue;
                }
                Point otherComponentLocation = otherApplier.getComponent().getLocation();
                otherApplier.getComponent().removeComponentListener(otherApplier);
                otherApplier.setDocking(true);
                otherApplier.getComponent().setLocation(otherComponentLocation.x + xDiff,
                        otherComponentLocation.y + yDiff);
                otherApplier.getComponent().addComponentListener(otherApplier);
            }
        }

        public void updateLastLocation() {
            this.setLastLocation(getComponent().getLocation());
        }

        @Override
        public void focusGained(FocusEvent e) {
            DockingManager.setFocusedApplier(this);
        }

        @Override
        public void focusLost(FocusEvent e) {
            // TODO Auto-generated method stub

        }
    }

    public DockingManager() {

    }

    public static void setFocusedApplier(DockingApplier applier) {
        DockingManager.focusedApplier = applier;
    }

    public static void main(String[] args) {
        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (Exception e) {
        }
        JFrame frame1 = new JFrame("Frame 1");
        JDialog dialog2 = new JDialog((JFrame) null, "Dialog 2");
        frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame1.setSize(200, 50);
        dialog2.setSize(200, 50);
        frame1.setVisible(true);
        dialog2.setVisible(true);

        JDialog dialog1 = new JDialog((JFrame) null, "Dialog 1");
        dialog1.setSize(200, 50);
        dialog1.setVisible(true);

        DockingManager manager = new DockingManager();

        manager.registerComponent(frame1, 1);
        manager.registerComponent(dialog2, 2);
        manager.registerComponent(dialog1, 2);

    }

    /**
     * @return the monitoredComponents
     */
    protected static Map<Component, DockingApplier> getMonitoredComponents() {
        return monitoredComponents;
    }
}

redpajama_set_name: RedPajamaStackExchange


text:
Q: Django model object changed after update I have a simple model as follows:
class Invite(models.Model):
    status = models.CharField()
    ....
    ....

In my view, I update an Invite entity:
invite_obj = Invite.objects.get(pk=id) # currently invite.status = "OLD"

print(invite_obj.status) # prints OLD

invite_serializer = CustomSerializer(invite_obj) # a custom serializer which updates the instance status from "OLD" to "NEW"

if invite_serializer.is_valid():
    invite_serializer.save()

print("after update", invite_obj.status) # prints NEW

variable invite_obj got modified after update. How did the variable storing the original entity is modified?
EDIT: code for custom serializer
class CustomSerializer(serializers.ModelSerializer):
    def update(self, instance, validated_data):
        with transaction.atomic():
           instance.status = "NEW"
           ...
           instance.save()
        return instance

A: please change your this following code:
invite_obj = Invite.objects.get(pk=id) # currently invite.status = "OLD"

print(invite_obj.status) # prints OLD

invite_serializer = CustomSerializer(invite_obj) # a custom serializer which updates the instance status from "OLD" to "NEW"

if invite_serializer.is_valid():
    invite_serializer.save()

print("after update", invite_obj.status) # prints NEW

to:
invite_obj = Invite.objects.get(pk=id) # currently invite.status = "OLD"

print(invite_obj.status) # prints OLD

invite_serializer = CustomSerializer(instance = invite_obj, data=request.data) # a custom serializer which updates the instance status from "OLD" to "NEW"

if invite_serializer.is_valid():
    invite_serializer.save()

print("after update", invite_obj.status) # prints NEW

I hope it will work for yu for sure.


Coming live from the Amsterdam Stock Exchange analysts from Marktgevoel daily publish articles with their views on the most interesting opportunities in the market. But this is not all; they actively trade based upon their given advice. Members of the service can follow transactions live and receive automatic updates by SMS and e-mail as soon as Marktgevoel makes changes to a position.
Smartshore developed the new website, including a connection for real-time retrieval of portfolio updates, maintaining transactions and members maintenance.
Specifically for Marktgevoel, Smartshore enhanched the default Magento CRM module. With these changes Marktgevoel is able to get better insights into products ordered by customers and the remaining time left on their membership.
For the design of the site a custom-made responsive template is created. The whole site can be accessed without any problems on a mobile device. The design was provided by Dexterweb.
SSmartshore developed a Magento admin module, which is used to maintain transaction in the system. As soon as a transaction is added members receive an SMS through Messagebird and an e-mail through Mailchimp.
To give members insights in transactions that are done for the various portfolios a connection is created with Lynx, the Marktgevoel broker. Members have real-time insights into the current portfolio positions and their prices, and historic results are updated automatically upon closing a trade. In line with the Marktgevoel philosophy, transparent trading and put your money where your mouth is.
Marktgevoel was using a heavily modified and extensive Joomla installation for adding articles, products and member administration. All users have successfully migrated to Magento, without loosing their passwords. As well as all memberships are migrated to the new system.
Smartshore finally provided a seamless transition to a new host. By optimizing the server specifically for Magento, the loading time of the site shortened with 50% compared to the old server. With this solution Marktgevoel is ready for the next growth step.
We develop custom e-commerce solutions, giving you a step ahead of the competition.


The truth may not be clear, but Bronte knows it's out there.
This entry was posted in General Blogging, Hidden, Photography, Reblogs, Writing and tagged 5 Star, Author, Book Club, Book Review, Bronte, Bronte Hughes, Bully, Bullying, Children, Coming Of Age, eBook, Family, Fantasy, Fiction, Friends, Friendships, Grandmother, Hartwell, Hidden, Ireland, Literature, Love, Magical, Nature, Paperback, Paranormal, Powers, Read, Reading, Recommended, Riley, Romance, Saga, School, Sci-Fi, Science Fiction, Series, Serina, Serina Hartwell, The Elements, The Hidden Saga Book 1, Urban, Urban Fantasy, Writer, Writing, YA, YA Fiction by serinahartwell. Bookmark the permalink.


text:
Amanit is a tabia or municipality in the Dogu'a Tembien district of the Tigray Region of Ethiopia. The tabia centre is Addi Qeshofo village, located approximately 15 km to the southeast of the woreda town Hagere Selam (as the crow flies).

Geography
The tabia stretches down southbound over an elongated ridge between Inda Sillasie River and Addi Keshofo River towards Giba River. The highest place is a hill east of Gudeli (2230 m a.s.l.) and the lowest place at the junction of Inda Sillasie and Giba Rivers (1448 m a.s.l.).

Geology
The two main geological formations are Antalo Limestone in most of the tabia, and Adigrat Sandstone on the slopes towards the river gorges. Quaternary alluvium and freshwater tufa occur in the valley bottoms.

Geomorphology and soils
The main geomorphic units, with corresponding soil types are:
 Gently rolling Antalo Limestone plateau, holding cliffs and valley bottoms on limestone
 Associated soil types
 shallow stony soils with a dark surface horizon overlying calcaric material (Calcaric Leptosol)
 moderately deep dark stony clays with good natural fertility (Vertic Cambisol)
 deep, dark cracking clays on calcaric material (Calcaric Vertisol, Calcic Vertisol)
 Inclusions
 Rock outcrops and very shallow soils (Lithic Leptosol)
 Shallow very stony loamy soil on limestone (Skeletic Calcaric Cambisol)
 Deep dark cracking clays with very good natural fertility, waterlogged during the wet season (Chromic Vertisol, Pellic Vertisol)
 Brown to dark sands and silt loams on alluvium (Vertic Fluvisol, Eutric Fluvisol, Haplic Fluvisol)
 Strongly incised Giba gorge
 Dominant soil type: complex of rock outcrops, very stony and very shallow soils ((Lithic) Leptosol)
 Associated soil types
 shallow, stony, dark, loamy soils on calcaric material (Rendzic Leptosol)
 shallow, stony to sandy loam soils on calcaric material (Calcaric Regosol and Cambisol
 brown loamy sands developed on alluvium along Giba River (Fluvisol)

Water

Springs and irrigation

There is permanent water in the main rivers, but located deep in the gorges, they are difficult of access. It is used for irrigation, and occasionally for drinking water. Hence, the presence of springs is of utmost importance for the local people. The following are the springs in the tabia:
 Addi Qeshefo in the homonymous village
 Gudeli in May Genet
 May Hib'o inside a cave in Addi Lihtsi

Ponds
In this area with rains that last only for a couple of months per year, reservoirs of different sizes allow harvesting runoff from the rainy season for further use in the dry season. There are many traditional surface water harvesting ponds, particularly in places without permanent springs, called rahaya; they continue to be maintained and expanded. In addition, Horoyo, household ponds, have recently been constructed through campaigns.

Vegetation and exclosures
The tabia holds several exclosures, areas that are set aside for regreening. Wood harvesting and livestock range are not allowed there. Besides effects on biodiversity, water infiltration, protection from flooding, sediment deposition, carbon sequestration, people commonly have economic benefits from these exclosures through grass harvesting, beekeeping and other non-timber forest products. The local inhabitants also consider it as "land set aside for future generations". In this tabia, some exclosures are managed by the EthioTrees project. They have as an additional benefit that the villagers receive carbon credits for the sequestered , as part of a carbon offset programme. The revenues are then reinvested in the villages, according to the priorities of the communities; it may be for an additional class in the village school, a water pond, conservation in the exclosures, or a store for incense. The following exclosures are managed by the Ethiotrees project in Amanit municipality:
 Addi Lihtsi, near the homonymous village (415.65 ha)
 Kidmi Gestet, near the village of Gestet (26.76 ha)
 May Genet, near the homonymous village (29.89 ha)
 May Hib'o, near the village of Addi Lihtsi (46.72 ha)

Livelihood
The population lives essentially from crop farming, supplemented with off-season work in nearby towns. The land is dominated by farmlands which are clearly demarcated and are cropped every year. Hence the agricultural system is a permanent upland farming system.
Especially the youngsters will go to the deep gorge of Giba river to harvest incense from Boswellia papyrifera trees.

Population
The tabia centre Addi Qeshofo holds a few administrative offices, a health post, a primary school, and some small shops. There are a few more primary schools across the tabia. The main other populated places are:

Religion and churches
Most inhabitants are Orthodox Christians. The following churches are located in the tabia:

History
The history of the tabia is strongly confounded with the history of Tembien.

Roads and communication
The main road Mekelle – Hagere Selam – Abiy Addi is far away from the tabia. A rural access road links most villages to Togogwa in Debre Nazret, where there is public transport to Mekelle and Hagere Selam.

Schools
Almost all children of the tabia are schooled, though in some schools there is lack of classrooms, directly related to the large intake in primary schools over the last decades. Schools in the tabia include Amanit school.

Tourism

Its mountainous nature and proximity to Mekelle makes the tabia fit for tourism.

Geotouristic sites
The high variability of geological formations and the rugged topography invites for geological and geographic tourism or "geotourism". Geosites in the tabia include:
 The Giba gorge with its incense trees
 May Hib'o cave
 Large rockfall west of Addi Lihtsi
 Traditional agroforestry in Segenet

Birdwatching
Birdwatching (for the species, see the main Dogu'a Tembien page) can be done particularly in exclosures and forests. The following bird-watching sites have been inventoried in the tabia and mapped.
 Abune Aregawi church forest
 Slope forests in Addi Qeshofo

Trekking routes
Trekking routes have been established in this tabia. The tracks are not marked on the ground but can be followed using downloaded .GPX files.
 Trek 15, from north to south across the tabia into Giba gorge
 Trek 16, from Rubaksa (Mika'el Abiy) across Segenet and May Genet to Togogwa (Debre Nazret) (10 km)
 Trek 18, from the old bridge on Giba River in Debre Nazret, up to the plateau and then westbound along the northern shoulder of the Giba Gorge to Addi Lihtsi (20 km)
Loops allow detailed visits of Addi Lihtsi village and its incense landscapes

Inda Siwa, the local beer houses
In the main villages, there are traditional beer houses (Inda Siwa), often in unique settings, which are a good place for resting and chatting with the local people. Most renown are in May Genet:
 Medhin Hayelom
 Hadash Mebrahten
 Indanuguse Alemayehu

Accommodation and facilities
The facilities are very basic.  One may be invited to spend the night in a rural homestead or ask permission to pitch a tent. Hotels are available in Hagere Selam and Mekelle. Rooms are for rent in the nearby Togogwa (Debre Nazret), a place that hosts pilgrims on their way to the Dabba Hadera monastery.

More detailed information
For more details on environment, agriculture, rural sociology, hydrology, ecology, culture, etc., see the overall page on the Dogu'a Tembien district.

References

Dogu'a Tembien
Populated places in the Tigray Region

redpajama_set_name: RedPajamaWikipedia


text:
Tag: Livestream
YouTube Launches Mobile Streaming Where Creators Can Earn Money
Kiruti Itimu - February 8, 2017
YouTube has always been a sleeping giant when it comes to providing a mainstream livestream service. They have been providing the service for a...
Twitter Is Testing a Permanent Page For Livestreams
Kiruti Itimu - August 26, 2016
Twitter has always been the network of choice to follow live events that are happening all over the world thanks to the unique nature...
You Can Watch the Wimbledon Tournament on a Live Video Broadcast on Twitter
Kiruti Itimu - July 6, 2016
Twitter might be a social networking platform that is experiencing stagnation in the acquisition of new monthly active users but it hasn't lost its...
Tumblr has launched Live Video with an interesting implementation
Kiruti Itimu - June 21, 2016
There is a livestreaming gold rush going on with social networking sites. Twitter decided to buy Periscope, Facebook has Live Video, Google has YouTube...
You can watch the Europa League and Champions League finals live on YouTube
Kiruti Itimu - May 18, 2016
YouTube is the biggest online video repository and some channels use its livestreaming feature to broadcast certain events. Sports and livestreams go hand in...
Periscope revamps Global Map and adds support for skipping ahead on replays
Kiruti Itimu - November 11, 2015
Periscope is one of those livestream services that have gathered quite a bit of traction this year. It was bought by Twitter early in...
How to follow the Galaxy S 4 Global Tour Johannesburg
Martin Gicheru - April 25, 2013
Samsung Galaxy S 4, unveiled at Samsung Unpacked in New York on March 15th will later today see an Africa launch. This will be...


-David Toop, Sinister Resonance: The Mediumship of the Listener.
Images and sounds of whimsical exploration. Small urban vignettes in Portugal rise to the surface and fade into memory. A short film born of detachment, remove, alienation. Walking, looking, shooting, recording sound. One day with camera, the next with sound recorder; a tag team of geographical tracings. Quotidian theater beckons; a sheet waving in the wind, the sound of a streetcar; why do these unadorned moments seem so necessary ? The sketches accumulate and then dissipate.
Jacqueline Goss and Jenny Perlin retrace the journey of the two astronomers tasked with determining the true length of the meter. From the Mediterranean Sea to the English Channel, The Measures explores the metric system's origins during the violence and upheaval of the French Revolution. Along the way, Goss and Perlin consider the intertwining of political and personal turmoil, the failures of standardization, and the subtleties of collaboration.
In a home filled with rare art objects from around the world, a disjunctured set of tales unravel about the travels of collector Don Boros. Dislocating fact from fiction and time from place, the tales are intermixed with the notable text "Sensations of Tone" by Helmholtz, the 19th century physicist. This work exists as a single channel and interactive version. This work utilizes the audience's iPhones to provide for a sonic and visual experience that physically engages the viewer and incorporates the space of the theater.
A film centred on the production of landscape and concrete in the Arrábida Natural Park, Portugal. Covering a vast area of coast, caves, mountains and forest, the park is inhabited by a massive concrete factory that branches through the landscape. Documenting the various layers of the sourced material, the factory body and the constructed landscape, the film looks at how time is physically embedded in the matter and how the molecular particles act in a circular re-shaping of the whole. The film merges 16mm footage shot in the area of Arrábida with 3D animation of the topographic landscape as an equal analogue layer.
Live soundtrack and soundscape from Maile Colbert.


FLORENCE, SC – Senior shortstop Taylor Johnson worked a bases-loaded walk in the bottom of the seventh to cap a three-run rally which gave Francis Marion University a 3-2 walk-off victory over Flagler College, in the back end of a Peach Belt Conference softball doubleheader on Saturday afternoon (April 6). The Saints edged the Patriots 3-2 in the twin bill opener.
FMU (24-15, 3-7) continues PBC play on Wednesday (April 10) as it hosts Augusta University for a double dip which begins at 4 p.m.
The two squads combined for just seven hits in game two, with no player on either squad posting multiple hits. The program's all-time walks leader (with 84), Johnson drew three free passes to lead the way for Francis Marion in game two, while junior shortstop Maria Kappos also reached three times (one hit and two walks) for Flagler (24-17, 7-3).
Trailing 2-0 entering the bottom of the seventh, Patriot senior first baseman Jessica Harney got the rally started by drawing a lead-off walk. Her twin sister, Jaimie, followed with a double off of the left field wall which was merely inches shy of a home run. Senior designated player Jennie Polak followed with a single through the left side to get FMU on the board and put the tying run at third, as well as the potential winning run at first.
Sophomore center fielder Karson Parker then laid down a bunt up the first base line. The Saints tried to throw out Jaimie Harney at the plate, but the senior second baseman slid in ahead of the tag to tie the contest. Sophomore left fielder Taylor DeLeon drew a walk to load the bases, and then Johnson was also handed a free pass to score pinch runner Liberty Schultz and give FMU the walk-off victory.
The contest was scoreless until the fifth. FMU junior right-handed pitcher Amie Hutchison (3-4) had not allowed a hit through the first four innings, but a walk, a single, and an error put two in scoring position with no outs for Flagler. Senior left fielder Megan Miller broke the deadlock with an RBI single, and a second run scored on a ground ball.
Hutchison recovered from that inning to keep the Saints off the board over the final two frames. The junior tossed her third complete game of the season, allowing two runs, one of which was earned, on four hits, with 16 of the 21 outs she recorded coming on ground balls.
Sophomore righty Katlyn McCue (8-5) was saddled with the loss for the Saints, going six innings and yielding three runs on three hits with five strikeouts.
In the opener, Jessica Harney led Francis Marion with a pair of hits, including her seventh home run of the season.
Miller had a pair of hits and scored the decisive run for the Saints.
Flagler struck first in game one, as junior third baseman Tatum Morgan homered with two outs in the top of the first. Jessica Harney tied it up with her solo shot in the second.
The Patriots then grabbed a 2-1 lead in the fourth. Senior third baseman Angela Buccilli walked to start the inning, stole second, and eventually scored on a two-out RBI single by freshman designated player Addie May.
Kappos evened the score with a sacrifice fly in the sixth. Johnson opened the bottom of the inning with a walk, but FMU left her stranded at third base.
In the top of the seventh, Miller led off with an infield single. The next two Saints reached to load the bases with no outs, and then junior right fielder Genevieve Mangini brought Miller in with a sacrifice fly. Francis Marion stayed within a run thanks to a diving catch in the right-center field gap by freshman right fielder Danielle Karacson.
The Harney twins tried to rally the Patriots in the last of the seventh, as a single by Jessica and double by Jaimie put the potential tying and winnings runs in scoring position with one out. However, junior righty Kyra Gipson (13-7) got a strikeout and pop up to quell the FMU uprising.
Gipson allowed two runs on four hits and struck out five to earn the complete-game victory for Flagler.
Sophomore right-hander Katelyn Ellard (15-6) went the distance as well for Francis Marion, surrendering three runs, two of which were earned, while fanning four.
HR FLG - T. Morgan.
HR FMU_SB - Jessica Harney.
K. McCue faced 3 batters in the 7th. A. Savaglio faced 3 batters in the 7th.


Andre Perry and son Robeson at the U.S Navy Memorial in Washington, D.C. "I need for Roby to fly around the world like a superhero," says Perry.
I almost named my son "August." I grew up in Pittsburgh, hometown of acclaimed playwright August Wilson and the primary set of his Pittsburgh Cycle, a series of 10 plays that document the African-American experience throughout the 20th century.
I didn't grow up knowing my father; he was killed in jail. But I recognized Troy in other Pittsburgh fathers. The scene reminds us of what fathering is supposed to be. He provides. He pays bills and takes out the trash.
And a good black father is supposed to prepare his son for a hard, cold world of racist white bosses and mean teachers. Black fathers are to prep their sons for the beatings they'll get later at the hands of neighborhood watchmen and crooked cops. We're supposed to teach our sons how to respect authority by instilling fear in the relationship. To be a good father, you have to control your son. And that starts with tattooing your name on him.
Wilson knew that black men's relationship to white masculinity made fatherhood loveless. You don't have to love your son in order to live up to your responsibilities as a father.
But as soon as my youngest son was born, I knew that he deserved love. Even more, I wanted him to be free, so I named him Robeson—after Paul.
As a father of two sons (I married into fatherhood), I've learned that loving my sons means that I have to reject the legacy of masculinity and what fatherhood is supposed to be.
Men don't really know how to love because we're too busy trying to control a world we don't own. When scholar and writer bell hooks taught me how my pursuit of white masculinity was the only love I really knew, I began new searches for love. I definitely found it with my sons. Every interaction with my sons is an exploration in learning how to love.
I never said "I love you" comfortably until my sons taught me how. I'm learning how to hold Robeson, not to control him but to convey affection and attention. I try my best to teach without the consequence of punishment. He should have the privilege of learning without bounds.
I seek to gain my sons' respect without leveraging fear. Being afraid doesn't get you very far in life, and I need for Roby to fly around the world like a superhero. I do my best to replace preaching with listening, so I'm trading shouts with penetrating questions. And I try to model these skills with the people closest to him. Boys learn how to shame women from other men trying to be good fathers.
Yes, I have to prepare my black boys for a world that is harsher to black folk. However, I need my children to recognize my efforts to make the world see their glorious smiles. I don't have to harden my children any more than the world invariably will. There will be racist teachers, bad cops, ugly employers and mean peers.
I refuse to have my sons adapt to broken systems. Preparing my sons for that reality means that I model and teach how to get justice for them. My sons have to see my capacity to love. That means they'll see a righteous indignation that emanates from loving them and other black people.
I didn't have a personal model for this kind of fathering. I honestly don't know if I'm a good one. I just know that I have to unlearn fatherhood so that I can instill in my sons the kind of love that will make them free.


According to independent consumer surveys of satellite TV providers and cable companies in Crosby, MN, DIRECTV has earned the title of best TV service provider in Crosby.
In order to help you evaluate cable companies and other paid television services available in your area, we've compiled results from a number of independent consumer surveys for you. This data ranks DIRECTV as the best TV service provider among satellite TV and cable companies in Crosby, MN.
When searching for the best cable company in Crosby, MN, make sure to look beyond the price tag. Each company (and each package) offers different channels. Most TV packages offer the biggest networks nationwide, but the local channels included in TV packages in Crosby will not be the same as in other cities and towns. So—whether you love watching the Minnesota Vikings and the or just want access to your favorite local programming—it's vital that you choose a package that offers a channel line-up that suits your preferences. That's why we've compiled the data you need to easily compare the packages, channels, and extra features of the highest rated providers available in Crosby.
If you're looking for a cable company in Crosby, MN, start your search at CableTV.com. Our TV provider ratings are based on multiple factors, including customer service and reliability. That means you have a higher chance of finding a provider with a channel line-up and customer service record you can be happy with.
CenturyLink Internet ranks highest among Internet service providers available in Crosby. Pay close attention to connection speed when you're shopping for Internet providers in Minnesota. Since Internet speeds vary quite a bit depending on your location, it's essential to look at each provider's speed in Crosby, MN and compare it to the state average speed of 26 Mbps. Of course, CableTV.com uses information about Internet speed to rate each company, helping you select an Internet provider that delivers the speed you're looking for.
TV and Internet bundles put money back in your wallet. In fact, bundling your cable TV package with Internet service from the same provider can save you $100 or more each year. CableTV.com offers tons of information on Internet and TV bundles available in Crosby, so you're sure to find a great deal.
Looking for a trustworthy resource that gives you all the information you need on TV provider options in Crosby, MN? CableTV.com has you covered. Choosing the right Internet and TV services can be a daunting process, especially in Crosby. But thanks to the provider ratings and information on CableTV.com, it's easier than ever to choose your TV provider. Promotions, special packages, customer reviews, and prices—you'll find all the information you need on CableTV.com!
Sorry, no stores were found near zip code 56441 for the provider selected.