text:
Home Cricket
Adam Zampa, wife Harriet Palmer welcome baby boy Eugene; see photos
by Gouri Das
in Cricket
Harriet Palmer, Adam Zampa and baby Eugene
Australian leg-spinner Adam Zampa has become a father on Sunday, June 12. He announced the news with the fans on his Instagram story earlier. The 30-year-old and wife Harriet Palmer welcomed their baby boy and named him Eugene.
In the photo he shared today, the little child can be seen holding his dad's finger. On Januray, Zampa had shared a photo of his pregnant wife. You can see both the pictures below:
Harriet Palmer and baby Eugene
Also Read | WATCH: Pakistan penalised 5 runs after Babar Azam's "illegal fielding" in 2nd ODI vs WI
Adam Zampa is not part of Sri Lanka series
Adam Zampa is not a part of the on-going limited over series in Sri Lanka because he pulled himself out for the birth of his first child. However, the New South Wales cricketer has carved a niche in Australia's white-ball team and is one of the consistent performer there. He is expected to be back with the team for the T20 World Cup 2022, which will be hosted in Australia.
Zampa has featured in 67 ODIs and 62 T20Is in his career so far and has 174 wickets to his name across all formats. He was also the leading wicket-taker in T20 World Cup 2021 in the UAE for his team. He scalped 13 wickets from seven matches and played a crucial role in Australia's clinching the coveted trophy. He also had a brilliant economy rate of 5.81 in that tournament.
Talking about the recently concluded three-match T20I series, Australia was denied a clean sweep because after losing two matches, Sri Lanka denied the Men in Yellow victory in the third match; credit goes to Dasun Shanaka's sensational knock in the death overs. Australia claimed the victory by 2-1 over the host. The two teams will now set for a five-match ODI series, scheduled to begin on Tuesday, June 14 at the Pallekele International Cricket Stadium.
Also Read | "South Africa unhe drop kar de"- Bhuvneshwar Kumar jokes to India's plan for David Miller question
Tags: Adam Zampa
Gouri Das
Gouri Das is a cricket writer at FirstSportz. Despite always being a sporty kid, she disliked being inactive in one place for a long time to watch a match. But after the Ind vs Pak match of the 2016 Asia Cup, she rather got glued to the TV screen. That year she watched the major cricket tournaments, WWE matches, and the Olympics (especially Usain Bolt's races). After reading about the big names in tennis and becoming an ardent follower, she dreams of visiting Wimbledon one day.
"I'm losing less," Alex Albon sheds light on an 'attachment' that has done his VR gaming a world of good
by FS Desk
Shawn Michaels Net Worth, Real Name, Salary, Wife, House, and more
by Shivangi Thapliyal
Veronika Rajek shares heartfelt story of her struggles online before her rumored links with Tom Brady
by Somdeb Khaskel
FIA President Mohammed Ben Sulayem deemed 'unprofessional' by UK parliamentarian
by Aniket Tripathi
FirstSportz is the First Stop for all sports fanatics. Starting in 2019, we initially covered Olympic Sports, but in 2021 we added every other sport which you might be looking for, like NFL, Golf, MLB, WWE Cricket, Football, Tennis, Esports, NBA, MMA and more.
Advertise at FirstSportz
© 2023 by Firstsportz


Each year, thousands of children become entangled in Shelby County's Juvenile Court System. Mayor Lee Harris believes that children sent to jail are falling through the cracks because of improper resources, such as classrooms and a functional recreational area.
Also this week, Harris talks about local economic development in relation to upcoming and ongoing projects, like Union Row. Harris says that he will advocate for projects that are well-planned and benefit the citizens of Shelby County.
Lastly, Harris announces that Cedrick Gray, a former superintendent of public schools in Jackson, Miss., has been appointed as the Director of Education for Shelby County, - a newly created position. Mayor Harris explains the role of Director of Education, as well as Gray's qualifications.


text:
Hrvatski tamburaški orkestar osnovan je 2006. godine u svrhu obilježavanja postojanja udruge Šokadija Zagreb. Okuplja tamburaše iz cijele Hrvatske.

Poznat je i kao Orkestar 100 tamburaša.

Uvršten je u Guinnessovu knjigu rekorda kao najveći tamburaški orkestar na svijetu. U prvom izdanju, za obilježavanje 95. obljetnice Šokadije Zagreb orkestar je imao čak 164 tamburaša.

Održavaju koncerte u  Koncertnoj dvorani Vatroslava Lisinskog u Zagrebu pod nazivom "Šokačka rapsodija" - 100 tamburaša.

Za orkestar je karakteristična funkcija voditelj dionica, koja je uvedena 2011. godine.

Vanjske poveznice
 Službena stranica orkestra

Izvori

Hrvatski tamburaški sastavi

redpajama_set_name: RedPajamaWikipedia


I seem to be somewhat addicted to continuing education. I love to learn new things and to explore new opportunities. Just because I'm finished (for the moment) with my official education doesn't mean I have to stop learning. During the past five years, I've taken countless classes on topics ranging from weaving and pottery to Egyptian history and Shakespeare.
Yes, some people would say I have a problem. But I think there are lots of people like me in Indianapolis. Whenever I take a class, I meet other people who love to take classes, too, and we always compare notes about where to go, which classes to take and which teachers we like.
But there doesn't seem to be a central point of information for Indy residents who are thinking, "What should I learn next?" I hope that's what this blog can become. I'll share class and lecture schedules, review the courses I take (or have taken in the past) and dig up some of the quirky learning opportunities Indy has to offer.
I welcome your comments and suggestions. Together, we can make this blog a great resource for Indy adults who want to learn new things.


The parent-managed head lice program involves parents and volunteers from the school or childcare centre.
The documents below can be modified for use at your school or childcare centre.
The parent-managed head lice program package contains the following documents.


Do you guys drop anything down the sink to keep the grey tank from stinking?
We closely monitor what we put into the sink drain and make an effort to drain the gray water often. The sink strainer also has the feature where it closes completely. I think that this also helps the odor issue.
We did not want to give up the space that the normal grey water tank would require in the galley cabinet under the sink.
Originally the plan was to just have the plumbing volume between the sink and the exterior drain valve.
After talking to SMB TX, they took up the challenge, and found a 2.5 gallon tank that looks like it was made to fit in the little spot forward of and above the passenger side rear wheel well. They applied some black paint and you don't even know it is there unless you are looking for it.
Thusfar it has worked perfectly. We have never filled it up.
So we ended up not sacrificing the interior space, and yet we do have some additional grey water storage.
draining it is another matter..
it comes out awful slow on my rig, even with it opened fully...compared to how fast it gets pumped in there.
So, let me get this right.. if we have the upgraded 20 gallon water tank we only have a 8 gallon grey tank? That doesn't make any sense at all.
Our "semi-classic" (read "old") '93 has two gray-water tanks, due to how the original owner designed it. There's one 8-gallon unit on the passenger side for the sink. Like many of you, we are careful what we let get in there, so we have not had odor problems. We've got 16 gallons of fresh water, so if we're out for several days the sink tank fills up. Ours doesn't overflow out the vent - you know it's full when the sink won't drain. The second gray tank is on the driver's side and takes water from the shower. It's pretty small. Finally there's the black water tank under the marine toilet. Biggest problem with our old-fashioned setup is that both gray-water tanks are easy to drain, but the black-water hookup pretty much requires lying on the ground and reaching under to get to it. Happily the macerator we bought will just clear the stuff under the van, so at least pumping it out is easy. Anybody else got a three-tank setup like this? Did SMB combine the gray and black output pipes on yours? On ours they are separate - not sure why, since they are right next to each other.
My gray water tank was also matched to a smaller fresh water tank and I upgraded to a larger potable water tank just to be able to use the outside shower more. I actually don't put much down the drain. I think SMB figures you will drink or use some of the water rather than dump it into the sink. I don't drink from the fresh water tank or use it for cooking but I do use it to brush teeth, do some dish washing and wash myself up with it. When I ordered my van I asked about using the fresh water tank to drink from and was told most do. Being I can't clean the tank easy, I just bring bottle water from my home water so it would be possible to over fill the gray tank if I didn't use the outside shower and did a lot of dish washing. I do the same as others have posted, that is most of the water in the gray tank is clean as a rule and I can dump the water in areas where there is no impact. I try to keep it empty…who wants to pack around any extra weight anyway.
As for the post about the tanks connected together, if the black water tank and gray water tanks were combined you could only dump at the correct sanitary station so it's probably something that you would have to request during the build.
I don't think there is any correlation between the size of the grey water tank and the size of the fresh water tank.
We have 20 gallon fresh water tank and the 2.5 gallon grey water tank.
The best part is that we have yet to fill the 2.5 gallon tank. I think we must have come close once judging by the amount of water that came out when I opened the valve.
Given the number of places that the grey water tank can go, I think there are two seperate decisions to be made.
Weird, i wonder what size we have then... cause we have emptied 3/4 of our 20 gallon tank with no water overflowing out of the wall.. nor the sink stop draining.
Have you verified that your gray water drain valve is in the closed position? Is it possible that it is open and you are draining all the time? I know that I have driven off while draining the (really clean) water out of the gray water holding tank and I have to remember to stop and close the valve and cap the drain. Just a thought.
Blackeye, yeah i have. Cause i've drained it like 3 times since we bought it.


text:
briggsdjurhuu
List Of National Parks Located In Washington
Faire un blog
Par briggsdjurhuu dans Accueil le 23 Septembre 2020 à 14:20
Yellowstone National Park (2.2 million acres) encompasses an unlimited area of geothermal features, from the iconic Old Faithful geyser to the Grand Prismatic Spring. It's also home to wolves, bison, and greater than 50 different mammal species. More than 1 / 4 of the park is roofed in glaciers, but it's also a hotbed of volcanic activity, with hundreds of lava flows converging within the 2,000-acre Wrangell Volcanic Field.
U S. National Parks With The Most Incredible Trees
So, a visit to Maine for 2 individuals costs around $2,014 for one week. If you're traveling as a household of three or four people, the worth particular person usually goes down as a result of child's tickets are cheaper and lodge rooms could be shared. If you journey slower over a longer time period then your every day finances may also go down. Two individuals touring together for one month in Maine can often have a decrease day by day finances per particular person than one person traveling alone for one week. You should plan to spend round $one hundred forty four per day on your vacation in Maine, which is the average daily worth primarily based on the bills of different visitors.
View a listing of essentially the most-visited websites within the National Park Service. The arrowhead was approved because the official National Park Service emblem by the Secretary of the Interior on July 20, 1951. Read more concerning the historical past of the arrowhead and different components of NPS visible design. Gaumer noted that several sites approved by Congress have but to be included within the NPS system because land acquisition and personal funding of other capital needs are incomplete. Those websites embody Ronald Reagan's boyhood house in Illinois, memorials to Dwight Eisenhower, Martin Luther King Jr. and the John Adams family in Washington, and the Sand Creek Massacre website in Colorado.
39% of the park space is designated as necessary for nature heritage; 25% is of European importance. travel in maine coast The land above 600 metres - generally known as the 'montane zone' - is the largest area of arctic mountain panorama in the British isles. Grand Canyon National Park (1.2 million acres) includes certainly one of America's most gorgeous pure options, the huge Grand Canyon, which stretches as much as 15 miles wide and a mile deep at some points.
National parks seize the imagination in numerous ways – some refined, others not a lot – but one of the many unbelievable aspects of the National Park System is the sheer size of our largest nationwide parks.
Our most large parks span hundreds of thousands of acres, and shield every thing from towering mountains and deep canyons to vast deserts and enormous glaciers.
Past vacationers have spent, on average, $35 on meals for one day and $forty on local transportation. Also, the common resort worth in Maine for a couple is $137.
So, a trip to Maine for 2 people for one week costs on common $2,014. All of these common journey costs have been collected from different travelers that can assist you plan your personal travel budget. Continue searching should you consent to this, or view our Cookie Policy. The rivers are house to a rising population of the globally endangered freshwater pearl mussel, in addition to salmon, trout, and uncommon lampreys. The rivers, loch and marshes are among the many cleanest in Scotland.
Washington Parks And Refuges
"All history is not pretty," said Soles, who famous that every fort in Delaware has been nominated by residents as a possible federal park site. Conversely, the Thaddeus Kosciuszko National Memorial in Philadelphia covers a scant .02 acres, making The Green a digital behemoth. Elias National Park and Preserve in Alaska covers more than 13 million acres, sufficient to accommodate a dozen Delawares. Roughly half a dozen islands near Acadia National Park offer in a single day accommodation.
Suivre le flux RSS des articles
briggsdjurhuu - Faire un blog gratuit sur Eklablog - CGU - CGV - Préférences cookies - Signaler un abus -

redpajama_set_name: RedPajamaCommonCrawl


As Project manager, I have run the largest development project in Guldmann's history, right from idea to implementation of the last product 10 years later. It was a complete new modularized product portfolio of Ceiling- and Mobile hoist and rail systems.
The target was to design a rail system that was fast to install and as low in cost as possible on a very tight time schedule.
Henning manages as a highly effective project manager to get the most out of a team. He always leads from the front and thereby maintains a high degree of motivation. Challenges are tackled with a fantastic drive and he clearly thrives when things are going a bit "up hill".
Henning's social skills and his abilities to read and communicate , whether within the project group or with external suppliers, make him very likeable.
Hennings extensive knowledge of multithreaded processes, his enthusiasm and ability to create long-lasting and loyal relationships with suppliers has been of great use and inspiration to our company.
Designing a flexible Ceiling Hoist that can be moved from one rail system to another. It installs and removes itself from the rail system automatically.
Pleas do not hesitate to contact me.
Develop brand new Grundfos variant based on competitors technology and double up the production volume at the current factory facilities in Germany. After closing down and large development project of development new hot water recirculator pump, Grundfos bought a competitor, and I got the task to run this project from idea to launch as a project manager.
Quality improvement and cost reduction on Grundfos Cash Cow.
Redesign terminal box, power terminals and speed selectors. Visual redesign of the complete pump taking full automatic assembly factory into account. This product was already at this time produced in very high volume, at that time 6.000.000 pumps/year.


Win a Pair of Tickets to Catch Dion Timmer and Blunts & Blondes at Avalon Hollywood!
On Friday, April 20, Dion Timmer and Blunts & Blondes are heading to Avalon Hollywood for a night full of dubstep beats.
The Netherlands is known for pumping out talent from all ends of the electronic music spectrum and Dion Timmer is one of their prized artists. After discovering dubstep at the ripe age of 10, Timmer dove into the world of production and sound design and quickly immersed himself in his passion.
2016 was a massive year for the Dubstep virtuoso. With numerous releases from acclaimed label Monstercat and collabs from the likes of X and Excision, the dubstep world was forced to take notice of the up-and-coming star. His defining moment was playing support of Excision's 2017 tour. This allowed his music to be exposed to over a quarter of a million dubstep fanatics and cemented his place in genre's ranks.
2018 is already shaping up to be an amazing year for him he's dropped a collab with Excision and is slated to play Lost Lands 2018! We look forward to what the rest of the year has in store for him!
Joining Dion Timmer on the main stage is bangin' dubstep artist and appropriate choice for a 4/20 celebration, Blunts & Blondes. When he's on stage the headbangers go wild as Blunts & Blondes is known to crank the hype levels over 9000. We are sure the dubstep community is going to keep hearing more from this talented artist as he's making waves nationwide!
Providing support on the main stage will be I AM GEO, Frawsty, and Devin Callen. The Pioneer Stage presented by LiveTheNight will be pumping out some quality beats from artists Chris Tiano, Elwer, Pyroxiism, Oscy, and Baema. Additionally, the Bardot Stage presented by No Sleep Alumni will be bringing the sounds of C_Style, Darkstar, Jo3y, Kieao, Slue, and We Are Us.
Love Dion Timmer, Blunts & Blondes and more? Enter to win a pair of tickets to the show!


text:
Mathematics PG Department
The Department of Mathematics was established in 1964. The Honours stream was introduced in 1985. The departmental library has a collection of 900 books. The total number of computers available in the department is 9. Internet facility is available. The department has a Numerical Laboratory as needed for the syllabus. Mathematics is a set of ideas and techniques that enable us to understand, analyze and solve problems faced in the real world. It has scientific precision. It also has aesthetic pleasure that fascinates and inspires those who understand it. Our graduates have ventured into diverse careers since they are recognised for logical and rigorous thinking. The department has four full time teachers and one full contractual teacher. The good news for the department as in the year 2018 the department has got sanction from the University of Calcutta to introduce the Post Graduation curriculum in Pure Mathematics.
The Department of Mathematics educates students in pure mathematics, inspiring them to appreciate, understand, and engage these disciplines. The study of mathematics offers a unique and important way of interpreting the world around us, bringing accuracy and rigor to the quest for discovering patterns in observations both abstract and concrete. We nurture a mathematical point of view in all of our students as a critical part of a university education. We strive to give the opportunity to mathematics majors and minors to acquire a broad and solid base in mathematics enabling both further study and application, and provide an outstanding undergraduate environment of courses and opportunities. The heart of our endeavor is excellence in teaching, scholarship, and service. To that end, we value individual work with all students; we encourage the development of existing and new courses and seminars; and we promote participation in mathematical activities at local, regional, and national levels. Professional and community activity of faculty members is critical to support this mission, and we work to extend strengths in research, exposition, and professional leadership while maintaining a tradition of service to the College community and beyond.
Student Learning Objectives
Logic and Proof:
Students will learn the basic principles of mathematical logic, to formulate conjectures, state them in clear mathematical form, and prove them as theorems or reject them with counter examples. They will develop sufficient competency to read basic mathematical literature and be able to rewrite, expand upon and explain the proofs.
Communication in Mathematics:
The ability to communicate effectively in both oral and written forms while applying their mathematical skills. Students will learn the basic language of proof and counter example. Students will organize and present significant ideas and calculations in written form.
Problem Solving:
A good understanding of basic mathematical methods for problem solving. Students will have a command of the fundamental methods of the calculus, linear algebra, differential equations, and abstract algebra.
Breadth and Depth:
Students will develop an awareness of the breadth and depth of mathematics of mathematics. This will include an awareness of historical and contemporary contexts in which mathematics is practiced. They will develop critical perspectives of the inherent limitations of the discipline.


The Stone Ridge Transitional Rustic Rectangular Cocktail Table with Painted Trestle Base by Kincaid Furniture at Janeen's Furniture Gallery in the Visalia, Tulare, Hanford, Porterville, Exeter area. Product availability may vary. Contact us for the most current availability on this product.


text:
Cardi B talks Fear of Failure & Dropping out of School as she covers Rolling Stone Magazine
Cardi B is unrestrained in her interview with Rolling Stone, as she discusses everything from her relationship with Offset of Migos to her fear of being a one-hit wonder.
Cardi B released her single "Bodak Yellow" in June, and in September it took the top spot of the Billboard Hot 100.
It's been up from there: her single was certified double platinum, she packed home a slew of awards at the BET Hip Hop Awards, and in October her man Offset proposed to her while she performed on stage.
One would expect the 25-year-old to drip confidence, however, this is not the case. She told Rolling Stone:
If you go broke and lose your career, it's bad – and everybody is talkin' s*** about it! At least if you lose your 9-to-5 you don't got millions of people judging you and talking s*** while you lost your job.
I got six, seven solid songs that I like, but I wonder if a month from now, I'm going to change my mind.
It's not as fun to do music. My mind doesn't flow as free 'cause I have so much on my mind.
Cardi B has come a long way. 7 years ago she was studying at a Manhattan community college planning to become a History teacher.
She got a job at the Amish market to support herself, but had to drop out of school because she kept missing classes. She said:
It was very frustrating – you have to pay for everything. When I finally got a job at Amish Market, I had to debate, "Do I wanna go to class or do I wanna finish my shift?"
She took up stripping, a career move suggested by her Amish market boss. She told Rolling Stone: "A lot of people wonder, 'Why would anybody want to be a dancer?' Because there's money!"
She thought of returning to school and eventually enrolled, but dropped out because she felt like she "was already failing. It was such a disappointment."
She felt she was destined to do something creative, leading her to a performing arts school. She'd sing and act and write poetry, and to make her friends laugh, she'd rewrite songs, sometimes by Beyonce, and make them "waaaay sluttier."
She became an Instagram sensation, amassing over 100,000 followers, by making playful videos about scamming men.
She met Offset by chance in New York in February. "We polish each other," she said. "I could always ask him, 'Do you think this is OK to do? Do you think I'm getting tricked?'"
She's always been open about her intention to marry him, and Offset proposed to her while they performed together at a concert in Philadelphia.
Asked where she sees herself in 25 years, Cardi B said: "I see myself cursin' at my kids."
Read the full cover story on Rolling Stone.
Photo Credit: Rolling Stone
Related Topics:BET #HipHopAwardsbeyonceBodak YellowCardi BMigosOffsetRolling StoneTaylor Swift
Ojuelegba Breed! Wizkid visits those that know his story ?
Laolu Senbanjo creates Grace Jones Inspired Bodysuit for Taraji P. Henson's Halloween Party
kim kardashian + nicky minaj = cardi b
What are we going to do with your breasts , ma'am ?
Yaaaay! Hollantex signs Yemi Alade as its Latest Brand Ambassador🥳
Turntable End of Year Countdown comes to Triller | December 23rd
Seyi Shay's much-anticipated "Big Girl" Album is available on all Streaming Platforms


text:
package za.org.grassroot.core.domain;

import lombok.Getter;
import lombok.Setter;
import za.org.grassroot.core.domain.account.AccountLog;
import za.org.grassroot.core.domain.campaign.CampaignLog;
import za.org.grassroot.core.domain.group.Group;
import za.org.grassroot.core.domain.group.GroupLog;
import za.org.grassroot.core.domain.livewire.LiveWireLog;
import za.org.grassroot.core.domain.notification.NotificationSendError;
import za.org.grassroot.core.domain.notification.NotificationStatus;
import za.org.grassroot.core.domain.task.EventLog;
import za.org.grassroot.core.domain.task.Task;
import za.org.grassroot.core.domain.task.TodoLog;
import za.org.grassroot.core.enums.DeliveryRoute;
import za.org.grassroot.core.enums.MessagingProvider;
import za.org.grassroot.core.enums.NotificationDetailedType;
import za.org.grassroot.core.enums.NotificationType;
import za.org.grassroot.core.util.UIDGenerator;

import javax.persistence.*;
import java.io.Serializable;
import java.time.Instant;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

/**
 * Next attempt time signifies when this notification has to be sent. When it gets delivered,
 * this timestamp is set as null.
 */
@Entity
@Table(name = "notification")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.STRING)
@Getter
public abstract class Notification implements Serializable {
	// default priority for notification is not overriden with getPriority();
	private static final int DEFAULT_PRIORITY = 1;

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "id", nullable = false)
	private Long id;

	@Column(name = "uid", nullable = false, unique = true)
	private String uid;

	@Column(name = "creation_time", insertable = true, updatable = false)
	private Instant createdDateTime;

	@Column(name = "attempt_count", nullable = false)
	@Setter private int sendAttempts = 0;

	@ManyToOne
	@JoinColumn(name = "target_id")
	private User target;

	@Column(name = "sending_status")
    @Enumerated(EnumType.STRING)
    @Setter private NotificationStatus status = NotificationStatus.READY_FOR_SENDING;

	@Setter
	@Column(name = "send_only_after")
	private Instant sendOnlyAfter;

	@Column(name = "last_status_change")
	private Instant lastStatusChange;

    @Setter
    @Column(name = "sending_key")
    protected String sendingKey;

	@Setter
	@Column(name = "delivery_channel")
    @Enumerated(EnumType.STRING)
	protected DeliveryRoute deliveryChannel = DeliveryRoute.SMS; //defaults to SMS

	@ManyToOne
	@JoinColumn(name = "event_log_id")
	private EventLog eventLog;

	@ManyToOne
	@JoinColumn(name = "action_todo_log_id")
	@Setter private TodoLog todoLog;

	@ManyToOne
	@JoinColumn(name = "group_log_id", foreignKey = @ForeignKey(name = "fk_notification_group_log"))
	protected GroupLog groupLog;

	@ManyToOne
	@JoinColumn(name = "account_log_id", foreignKey = @ForeignKey(name = "fk_notification_account_log"))
	private AccountLog accountLog;

	@ManyToOne
	@JoinColumn(name = "user_log_id", foreignKey = @ForeignKey(name = "fk_notification_user_log"))
	private UserLog userLog;

	@ManyToOne
	@JoinColumn(name = "livewire_log_id", foreignKey = @ForeignKey(name = "fk_notification_livewire_log"))
	private LiveWireLog liveWireLog;

	@ManyToOne
	@JoinColumn(name = "campaign_log_id", foreignKey = @ForeignKey(name = "fk_notification_campaign_log"))
	private CampaignLog campaignLog;

	@Column(name = "message")
	protected String message;

	@Setter
	@Column(name = "sent_via_provider")
	@Enumerated(EnumType.STRING)
	private MessagingProvider sentViaProvider = null;

	@Setter
	@Column(name = "read_receipt_fetches")
	private int readReceiptFetchAttempts;

	@Setter
	@Column(name = "use_only_free_channels")
	private boolean useOnlyFreeChannels = false;

	@ElementCollection
	@CollectionTable(name = "notification_error", joinColumns = @JoinColumn(name = "notification_id"))
	private List<NotificationSendError> sendingErrors = new ArrayList<>();

	@Transient
	public int priority;

	public abstract NotificationType getNotificationType();

	public abstract NotificationDetailedType getNotificationDetailedType();

	public User getSender() {
		return null;
	}

	protected Notification() {
		// for JPA
	}

	protected Notification(User target, String message, ActionLog actionLog) {
		this.uid = UIDGenerator.generateId();

		this.target = Objects.requireNonNull(target); // at least for now, Notifications are always targeted to a user
		this.createdDateTime = Instant.now();
		this.lastStatusChange = createdDateTime;
		this.message = Objects.requireNonNull(message);
		this.readReceiptFetchAttempts = 0;

		this.priority = DEFAULT_PRIORITY;
		this.deliveryChannel = target.getMessagingPreference();

		if (actionLog instanceof EventLog) {
			eventLog = (EventLog) actionLog;
		} else if (actionLog instanceof GroupLog) {
			groupLog = (GroupLog) actionLog;
		} else if (actionLog instanceof TodoLog) {
			todoLog = (TodoLog) actionLog;
		} else if (actionLog instanceof AccountLog) {
			accountLog = (AccountLog) actionLog;
		} else if (actionLog instanceof UserLog) {
			userLog = (UserLog) actionLog;
		} else if (actionLog instanceof LiveWireLog) {
			liveWireLog = (LiveWireLog) actionLog;
		} else if (actionLog instanceof CampaignLog) {
			campaignLog = (CampaignLog) actionLog;
		} else {
			throw new IllegalArgumentException("Unsupported action log: " + actionLog);
		}

	}

	/**
	 * @param status                 status to be set
	 * @param resultOfSendingAttempt if this status update is result of sending attempt should be true, otherwise false
	 * @param resultOfReceiptFetch if this status update is result of getting a read receipt
	 */
	public void updateStatus(NotificationStatus status, boolean resultOfSendingAttempt, boolean resultOfReceiptFetch, String error) {
		NotificationStatus oldStatus = this.status;
		this.status = status;
		this.lastStatusChange = Instant.now();
		if (resultOfSendingAttempt)
			this.sendAttempts++;
		if (resultOfReceiptFetch)
			this.readReceiptFetchAttempts++;
		if (error != null) {
			NotificationSendError sendError = new NotificationSendError(LocalDateTime.now(), error, oldStatus, status);
			this.sendingErrors.add(sendError);
		}
	}

	// used in messaging service
	public void incrementReceiptFetchCount() {
		this.readReceiptFetchAttempts++;
	}

	/**
	 * @return group relevant for action that triggered this notification
	 */
	public Group getRelevantGroup() {
		if (this.eventLog != null)
			return eventLog.getEvent().getAncestorGroup();

		else if (this.groupLog != null)
			return this.groupLog.getGroup();

		else if (this.todoLog != null)
			return this.todoLog.getTodo().getAncestorGroup();

		else if (this.accountLog != null)
			return this.accountLog.getGroup();

		else if (this.liveWireLog != null)
			return this.liveWireLog.getAlert().getGroup();

		else return null;
	}

	public Task getTask() {
		return null;
	}

	public boolean isRead() {
		return this.status == NotificationStatus.READ;
	}

	public boolean isDelivered() {
		return this.status == NotificationStatus.DELIVERED || this.status == NotificationStatus.READ;
	}

	public boolean isViewedOnAndroid() {
		return this.deliveryChannel == DeliveryRoute.ANDROID_APP && this.status == NotificationStatus.READ;
	}

	public boolean isPrioritySatisfiedByTarget() {
		return this.priority >= target.getNotificationPriority();
	}

	/**
	 * Locale utilities
	 */

	@Override
	public boolean equals(Object o) {
		if (this == o) {
			return true;
		}
		if (o == null || getClass() != o.getClass()) {
			return false;
		}

		Notification that = (Notification) o;

		return uid != null ? uid.equals(that.uid) : that.uid == null;

	}

	@Override
	public int hashCode() {
		return uid != null ? uid.hashCode() : 0;
	}

	@Override
	public String toString() {
		final StringBuilder sb = new StringBuilder(getClass().getSimpleName());
		sb.append("{id=").append(id);
		sb.append(", uid='").append(uid).append('\'');
		sb.append(", target=").append(target);
		appendToString(sb);
		sb.append(", sendAttempts=").append(sendAttempts);
		sb.append(", status=").append(status);
		sb.append(", createdDateTime=").append(createdDateTime);
		sb.append(", lastStatusChange=").append(lastStatusChange);
		sb.append('}');
		return sb.toString();
	}

	/**
	 * This is a way for subclass to add its own specific toString information
	 * @param sb StringBuilder
	 */
	protected abstract void appendToString(StringBuilder sb);
}

redpajama_set_name: RedPajamaGithub


text:
Kretzmann's Popular Commentary of the Bible
Mackintosh's Notes
Moses as God's Ambassador to Pharaoh
v. 1. And the Lord said unto Moses, See, I have made thee a god to Pharaoh, He had given him authority as His ambassador, with power to carry out His judgments; and Aaron, thy brother, shall be thy prophet, by acting as spokesman of the revelations given to Moses.
v. 2. Thou shalt speak all that I command thee, communicate the commands and the revelations of God to Aaron; and Aaron, thy brother, shall speak unto Pharaoh, that he send the children of Israel out of his land. That aim Aaron was always to keep in mind, to induce the king of Egypt to permit the emigration of Israel.
v. 3. And I will harden Pharaoh's heart, and multiply My signs and wonders in the land of Egypt. Because Pharaoh would harden his heart in the first place, the Lord intended to punish him by leaving him in this sin of obduracy. In this way the glory of the Lord would be increased by the many miracles which were to be performed before Pharaoh.
v. 4. But Pharaoh shall not hearken unto you, on account of his condition of hard-heartedness, that I may lay My hand upon Egypt, and bring forth Mine armies, the hosts that were to wage the Lord's battles, and My people, the children of Israel, out of the land of Egypt by great judgments. The Lord would judge, condemn, and punish the entire land of Egypt because the people consented to the sins of their king.
v. 5. And the Egyptians shall know that I am the Lord when I stretch forth Mine hand upon Egypt, in avenging justice and in almighty power, and bring out the children of Israel from among them.
v. 6. And Moses and Aaron did as the Lord commanded them, so did they. They accepted the commission given them.
v. 7. And Moses was fourscore years old and Aaron fourscore and three years old when they spake unto Pharaoh. This concludes the narrative of the call of Moses and Aaron. Both of them now willingly placed themselves under the direction of the Lord, just as all true servants of God perform His will whenever He commands.
The Miracles in the Presence of Pharaoh
v. 8. And the Lord spake unto Moses and unto Aaron, saying,
v. 9. When Pharaoh shall speak unto you, saying, Show a miracle for you, then thou shalt say unto Aaron, Take thy rod and cast it before Pharaoh, and it shall become a serpent. This miracle, Exodus 4:3-5, was to substantiate the words of the ambassadors, to give definite proof of their divine commission.
v. 10. And Moses and Aaron went in unto Pharaoh, and they did so as the Lord had commanded; and Aaron cast down his rod before Pharaoh, the shepherd's staff which Moses had brought along and had entrusted to Aaron for that purpose, and before his servants, and it became a serpent, a large,. poisonous snake.
v. 11. Then Pharaoh also called the wise men and the sorcerers, the men versed in occult arts and witchcraft. Now the magicians of Egypt, they also did in like manner with their enchantments, for the devil is also able to perform what seems like miracles, with the sufferance of God.
v. 12. For they cast down every man his rod, and they became serpents, there being, to all appearances, no difference between the miracles. But Aaron's rod swallowed up their rods, God thus indicating that He was the mightier. Cf 2 Timothy 3:8, where the names of the chief sorcerers of Pharaoh are supplied as having been Jannes and Jambres.
v. 13. And He hardened Pharaoh's heart, that he hearkened not unto them; as the Lord had said. The fact that his wise men with their witchcraft succeeded in imitating the miracle of Aaron was enough to decide Pharaoh against the Lord, the result being a hardening of his heart. Even so many an unbeliever in our days is confirmed in his opposition to the Gospel by the claims advanced by a false science.
The Plague of Blood
v. 14. And the Lord said unto Moses, Pharaoh's heart is hardened, he refuseth to let the people go.
v. 15. Get thee unto Pharaoh in the morning; lo, he goeth out unto the water, to the river Nile; and thou shalt stand by the river's brink against he come, he should stand ready to meet him as Pharaoh approached ; and the rod which was turned to a serpent thou shalt take in thine hand.
v. 16. And thou shalt say unto him, The Lord God of the Hebrews hath sent me unto thee, saying, Let My people go that they may serve Me in the wilderness, Exodus 3:12-18; and, behold, hitherto thou wouldest not hear.
v. 17. Thus saith the Lord, In this thou shalt know that I am the Lord: behold, I will smite with the rod that is in mine hand upon the waters which are in the river, and they shall be turned to blood, not merely be given a blood-red color through the presence of microscopic animals or particles of red clay, but actually be changed into blood, that the river throughout the length of Egypt would flow with the liquid which commonly pulses through the arteries and veins of men and beasts.
v. 18. And the fish that is in the river shall die, and the river shall stink; and the Egyptians shall loathe to drink of the water of the river. With their life element taken from them, the fishes could no longer live, and their decaying carcasses would infect the river and cause an insufferable stench.
v. 19. And the Lord spake unto Moses, Say unto Aaron, Take thy rod, the same staff which had served before, and stretch out thine hand upon the waters of Egypt, upon their streams, upon their rivers, and upon their ponds, and upon all their pools of water, that they may become blood. Thus not only the Nile with its various arms was involved, but also the canals of the Nile, all lakes or ponds that had been formed by the overflow of the Nile, And that there may be blood throughout all the land of Egypt, both in vessels of wood and in vessels of stone, in all pails, jugs, and tubs, in which water was kept for use in the homes.
v. 20. And Moses and Aaron did so, as the Lord commanded; and he lifted up the rod, and smote the waters that were in the river, in the sight of Pharaoh, who was thus to witness the cause and to note the effect, and in the sight of his servants; and all the waters that were in the river were turned to blood.
v. 21. And the fish that was in the river died; and the river stank, and the Egyptians could not drink of the water of the river; and there was blood throughout all the land of Egypt. The Nile was the one source of fertility and life in Egypt, and therefore the Lord indicated by this miracle that it was an easy matter for Him to change all the blessings of the country into curses. The very Nile to which the Egyptians gave divine honor was subject to the command of the God of the Hebrews, and this fact was to be impressed upon them forcibly.
v. 22. And the magicians of Egypt did so with their enchantments, probably over the water of the wells dug by the Egyptians,
v. 24. and Pharaoh's heart was hardened, neither did he hearken unto them, as the Lord had said.
v. 23. And Pharaoh turned and went into his house, neither did he set his heart to this also. His heart was in no manner moved to grant the request of Moses and Aaron.
v. 24. And all the Egyptians digged round about the river for water to drink; they quickly dug wells in the hope that the underground springs were still pure or that the seepage water had not turned into blood; for they could not drink of the water of the river.
v. 25. And seven days were fulfilled, after that the Lord had smitten the river, for it was He whose curse rested upon the land, and the miracle had been performed in His power. The plague lasted seven days and may to this day be regarded as an example of warning to all unbelievers.
Kretzmann, Paul E. Ph. D., D. D. "Commentary on Exodus 7". "Kretzmann's Popular Commentary". https://www.studylight.org/commentaries/eng/kpc/exodus-7.html. 1921-23.


text:
Variety Plus Icon Read Next: Mirror Concert Incident: Hong Kong Files 15 Charges Against Contractors
Jan 14, 2015 3:00am PT
Marc Cimino Tapped As COO of Universal Music Publishing Group
By Steve Chagollan
Steve Chagollan
Assistant Managing Editor, Features
@SteveChagollan
Peter Bogdanovich, Iconic Director of 'Last Picture Show' and 'Paper Moon,' Dies at 82 1 year ago
Presidential Candidates and Music: What's Playing at Campaign Stops 7 years ago
Newport Beach Film Fest Honors Revered Composer Burt Bacharach 7 years ago
In what amounts to Jody Gerson's first significant hire, Marc Cimino has been tapped for the newly created position of chief operating officer at the Universal Music Publishing Group. Cimino will report to Gerson, who joined UMPG as its chairman and CEO at the beginning of the year, with both based at the company's headquarters in Santa Monica.
Like Gerson, who hailed from Sony/ATV Music Publishing prior to Jan. 1, Cimino joins UMPG from one of the three majors, Warner Bros. Records, where he was executive VP & head of business & legal Affairs.
In his new role, Cimino will focus on UMPG's global business strategy, including being at the forefront of guiding public policy and business development, according to the company announcement.
"At this time in our business, it's important we work with a global perspective and more closely with our record label partners," said Gerson in a statement. "Marc's broad experience in recorded music will help bolster our organization and bring a broader industry approach to everything we do, and to the ultimate benefit of our artists and writers."
For his part, Cimino called Gerson, the first woman to lead a major music publishing company, "a dynamic visionary" while stating that he looked forward to "working with the entire team around the world, and with our labels and tech partners as we face a rapidly changing business environment with many new opportunities and challenges."
Cimino spent 10 years at Warner Bros. Records, where he helped oversee the label's government affairs initiatives and spearheaded the structuring and negotiation of agreements with the label's major recording artists. From 1998 to 2004 he held business affairs and business development roles at Sony Music Entertainment. Prior to Warner Bros. Records, from 1998 to 2004, Cimino held business affairs and business development roles at Sony Music Entertainment.
UMPG clients include Adele, Justin Bieber, Coldplay, Imagine Dragons, Nicki Minaj, Justin Timberlake and U2. Legacy acts include the Beach Boys, Irving Berlin, Leonard Bernstein, Jimi Hendrix and Paul Simon.
Universal Music Publishing Group


text:
Unruly makes impressive debut in latest IPA Digital Media Owners Survey
Mark St Andrew
2019-05-23 Back to awards
Unruly has been featured for the first time in the latest IPA Digital Media Owner Survey, picking up some impressive scores and rankings among some of the biggest names in media and adtech.
Launched in 2007, the bi-annual survey collects more than 350 responses from digital planners, strategists, buyers and specialists in IPA member media agencies. Respondents are asked to rate top trading and adtech partners against a set of attributes on a seven-point scale.
Out of 22 suppliers, Unruly scored 7th place with 79.3% of respondents agreeing or strongly agreeing with the statement, "My overall experience of dealing with this supplier is a good one". While TI Media (formerly Time Inc) secured the top spot with an impressive 87.5%, the big tech platforms such as Twitter, Snap, Google/YouTube and Amazon dominated the bottom of the table. Facebook was the worst performing supplier with just 41.8% agreeing or strongly agreeing with the statement.
Excellent understanding
When asked how much they agreed with the statement, "The sales team demonstrates an excellent understanding of their own products", Unruly stormed to the top of the table with more than 95% of respondents agreeing/strongly agreeing.
"I'm really happy with that result," said Saint Betteridge, UK Commercial Director, "we're always refreshing product knowledge and working on new ways to tell the Unruly story."
When it comes to constructive meetings or telephone contact, Unruly also performed well – scoring 4th place. Once again it the big tech companies filled out the bottom of the table, with Snap coming last behind Google, Amazon, Twitter, Facebook and Spotify. "This is another great signal that the way our teams engage with clients is working," explained Betteridge. "There's always room for improvement, but it's good to know that our clients feel that every encounter with Unruly is a useful and positive one."
This idea of useful and positive partnerships was backed up by Unruly's performance when participants were asked how much they agreed with the statement; "The sales team engenders a real sense of an agency/media owner partnership". Unruly beat most of the competition to rank 3rd. "It's interesting to see that 64% of the companies ranked scored more than 60% or higher in this category, while the big tech platforms could only manage scores in the 20s and 40s bracket. The scores throughout this survey support the message we're hearing from clients in that people are hungry for an alternative to solely working with the big tech giants, and that companies like Unruly can play a key role in the media mix."
Learn more about how Unruly could supercharge your video campaigns here.
Latest IPA Survey Places Unruly Amongst Top Media Owners
Unruly Tops IPA Media Owner 2013 Autumn Survey (IPA Press Release)
Unruly Ranks Amongst Top Media Owners In IPA Survey
Unruly Brings Emotional Targeting To Video Advertisers Across India


text:
Underwater Noise From Three Types Of Offshore Wind Turbines: Estimation Of Impact Zones For Harbor Porpoises And Harbor Seals
Title: Underwater Noise From Three Types Of Offshore Wind Turbines: Estimation Of Impact Zones For Harbor Porpoises And Harbor Seals
Tougaard, J.; Henriksen, O.; Miller, L.
Acoustical Society of America
Aarhus University, National Environmental Research Institute (NERI), University of Southern Denmark
Wind Energy, Fixed Offshore Wind
Marine Mammals, Pinnipeds
Tougaard, J.; Henriksen, O.; Miller, L. ( 2009 ). Underwater Noise From Three Types Of Offshore Wind Turbines: Estimation Of Impact Zones For Harbor Porpoises And Harbor Seals. Journal of the Acoustical Society of America, 125(6), 3766-3773. https://doi.org/10.1121/1.3117444
Underwater noise was recorded from three different types of wind turbines in Denmark and Sweden (Middelgrunden, Vindeby, and Bockstigen-Valar) during normal operation. Wind turbine noise was only measurable above ambient noise at frequencies below 500 Hz. Total sound pressure level was in the range 109-127 dB re 1 μPa rms, measured at distances between 14 and 20 m from the foundations. The 1/3-octave noise levels were compared with audiograms of harbor seals and harbor porpoises. Maximum 1/3-octave levels were in the range 106-126 dB re 1 μPa rms. Maximum range of audibility was estimated under two extreme assumptions on transmission loss (3 and 9 dB per doubling of distance, respectively). Audibility was low for harbor porpoises extending 20-70 m from the foundation, whereas audibility for harbor seals ranged from less than 100 m to several kilometers. Behavioral reactions of porpoises to the noise appear unlikely except if they are very close to the foundations. However, behavioral reactions from seals cannot be excluded up to distances of a few hundred meters. It is unlikely that the noise reaches dangerous levels at any distance from the turbines and the noise is considered incapable of masking acoustic communication by seals and porpoises.


The information contained in this website is for general information purposes only. The information is provided by Manningham Day Procedure Centre and whilst we endeavour to keep the information up-to-date and correct, we make no representations or warranties of any kind, express or implied, about the completeness, accuracy, reliability, suitability or availability with respect to the website or the information, products, services, or related graphics contained on the website for any purpose. Any reliance you place on such information is therefore strictly at your own risk. For complete and accurate information, please contact Manningham Day Procedure Centre Phone Number: (03) 88 500 590 during business hours, Monday to Friday.
Through this website you are able to link to other websites which are not under the control of Manningham Day Procedure Centre. We have no control over the nature, content and availability of those sites. The inclusion of any links does not necessarily imply a recommendation or endorse the views expressed within them. Product availability on suppliers website is limited, directly to stock availability through Manningham Day Procedure Centre. We have no control of stock availability through our stockists.
Every effort is made to keep the website up and running smoothly. However, Manningham Day Procedure Centre takes no responsibility for, and will not be liable for, the website being temporarily unavailable due to technical issues beyond our control.


text:
Q: Prolog Constraint Processing : Packing Squares I'm trying to solve a constraint processing problem in prolog.
I need to pack 4 squares of 5x5,4x4,3x3 and 2x2 in a grid of 10x10.
They may not overlap.
My variables look like this:
Name: SqX(i), i=1..10, domain: 1..10

Where X is either 5,4,3 or 2. The index i represents the row, the domain the column in the grid.
My first constraints try to define the width and height of the squares. I formulate it as such:
Constraint: SqX(i) > SqX(j)-X /\ i>j-X, range: i>0 /\ j>0

So that the possible points are constrained to be within X rows and columns from each other.
Prolog however, stops on these constraints and gives the following result:
Adding constraint "(Sq5_I > Sq5_J-5) /\ (I>J-5)" for values:
        I=1, J=1,
        I=1, J=2,
        I=1, J=3,
        I=1, J=4,
        I=1, J=5,
        I=1, J=6,
=======================[ End Solutions ]=======================

So it stops there, not even checking the other squares. My constraints are most likely too tight, but I can't see why or how. Any suggestions?

A: There are already several great solutions posted here (+1 for all!), using CLP(FD) constraints.
In addition, I would like to show one conceptually different way to solve such placement and covering tasks, using CLP(B) constraints.
The idea is to consider each possible placement of a tile as a set of TRUE values at specific elements on the grid, where each grid element corresponds to one column of a matrix, and each possible placement of a tile corresponds to one row. The task is then to select a set of rows of said matrix in such a way that each grid element is covered at most once, or in other words, there is at most one TRUE value in each column of the submatrix consisting of the selected rows.
In this formulation, the selection of rows — and hence the placement of tiles at specific positions — is indicated by Boolean variables, one for each row of the matrix.
Here is the code I would like to share, it works in SICStus Prolog and SWI with at most small changes:
:- use_module(library(clpb)).
:- use_module(library(clpfd)).

/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   The tiles we have available for placement.

   For example, a 2x2 tile is represented in matrix form as:

       [[1,1],
        [1,1]]

   1 indicates which grid elements are covered when placing the tile.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */

tile(5*5).
tile(4*4).
tile(3*3).
tile(2*2).

tile_matrix(Rows) :-
        tile(M*N),
        length(Rows, M),
        maplist(length_list(N), Rows),
        append(Rows, Ls),
        maplist(=(1), Ls).

length_list(L, Ls) :- length(Ls, L).

/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   Describe placement of tiles as SAT constraints.

   Notice the use of Cards1 to make sure that each tile is used
   exactly once. Remove or change this constraint if a shape can be
   used multiple times, or can even be omitted.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */

placement(M, N, Vs, *(Cs) * *(Cards1)) :-
        matrix(M, N, TilesRows),
        pairs_keys_values(TilesRows, Tiles, Rows),
        same_length(Rows, Vs),
        pairs_keys_values(TilesVs0, Tiles, Vs),
        keysort(TilesVs0, TilesVs),
        group_pairs_by_key(TilesVs, Groups),
        pairs_values(Groups, SameTiles),
        maplist(card1, SameTiles, Cards1),
        Rows = [First|_],
        phrase(all_cardinalities(First, Vs, Rows), Cs).

card1(Vs, card([1], Vs)).

all_cardinalities([], _, _) --> [].
all_cardinalities([_|Rest], Vs, Rows0) -->
        { maplist(list_first_rest, Rows0, Fs, Rows),
          pairs_keys_values(Pairs0, Fs, Vs),
          include(key_one, Pairs0, Pairs),
          pairs_values(Pairs, Cs) },
        [card([0,1], Cs)],
        all_cardinalities(Rest, Vs, Rows).

key_one(1-_).

list_first_rest([L|Ls], L, Ls).

/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   We build a matrix M_ij, where each row i describes what placing a
   tile at a specific position looks like: Each cell of the grid
   corresponds to a unique column of the matrix, and the matrix
   entries that are 1 indicate the grid positions that are covered by
   placing one of the tiles at the described position. Therefore,
   placing all tiles corresponds to selecting specific rows of the
   matrix such that, for the selected rows, at most one "1" occurs in
   each column.

   We represent each row of the matrix as Ts-Ls, where Ts is the tile
   that is used in each case.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */

matrix(M, N, Ms) :-
        Squares #= M*N,
        length(Ls, Squares),
        findall(Ts-Ls, line(N, Ts, Ls), Ms).

line(N, Ts, Ls) :-
        tile_matrix(Ts),
        length(Ls, Max),
        phrase((zeros(0,P0),tile_(Ts,N,Max,P0,P1),zeros(P1,_)), Ls).

tile_([], _, _, P, P) --> [].
tile_([T|Ts], N, Max, P0, P) -->
        tile_part(T, N, P0, P1),
        { (P1 - 1) mod N >= P0 mod N,
          P2 #= min(P0 + N, Max) },
        zeros(P1, P2),
        tile_(Ts, N, Max, P2, P).

tile_part([], _, P, P) --> [].
tile_part([L|Ls], N, P0, P) --> [L],
        { P1 #= P0 + 1 },
        tile_part(Ls, N, P1, P).

zeros(P, P)  --> [].
zeros(P0, P) --> [0], { P1 #= P0 + 1 }, zeros(P1, P).

The following query illustrates which grid elements are covered (1), where each row corresponds to the placement of one of the rectangles:
?- M = 7, N = 9, placement(M, N, Vs, Sat), sat(Sat),
  labeling(Vs), matrix(M, N, Ms), pairs_values(Ms, Rows),
  pairs_keys_values(Pairs0, Vs, Rows),
  include(key_one, Pairs0, Pairs1), pairs_values(Pairs1, Covers),
  maplist(writeln, Covers).
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1,1,0,0,0,0]
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,1]
[0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
[0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
M = 7,
N = 9,
etc.

corresponding to the solution:

Such a CLP(B) formulation is typically less scalable than a CLP(FD) version, also because there are more variables involved. However, it also has a few advantages:
One significant advantage is that it is readily generalized to a version of the task where some or all of the shapes can be used multiple times. For example, in the version above, we can simply change card1/2 to:
custom_cardinality(Vs, card([0,1,2,3,4,5,6,7], Vs)).

and obtain a version where each tile can be used up to 7 times, and can even be omitted entirely (due to the inclusion of 0).
Second, we can easily turn this into a solution for an exact cover problem, which means that each grid element is covered by one of the shapes, by simple changing card([0,1], Cs) to card([1], Cs) in all_cardinalities//3.
Together with the other modification, here is a covering for a 4x4 grid using four 2x2 rectangles:
[1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0]
[0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0]
[0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0]
[0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1]

A third advantage of the CLP(B) formulation is that the number of solutions can be computed without enumerating the solutions explicitly. For example, for the original task:
?- placement(7, 9, Vs, Sat), sat_count(Sat, Count).
Count = 68.

These 68 solutions are already beautifully illustrated by @repeat.
For comparison, here is the number of solutions where each shape can be used between 0 and 7 times:
?- placement(7, 9, Vs, Sat), time(sat_count(Sat, Count)).
% 157,970,727 inferences, 19.165 CPU in 19.571 seconds
...
Count = 17548478.

The same on a 10x10 grid, computed in about 6 minutes (~ 2 billion inferences):
?- placement(10, 10, Vs, Sat), sat_count(Sat, Count).
Count = 140547294509.

And on an 11x11 grid, computed in about half an hour (~ 9 billion inferences):
?- placement(11, 11, Vs, Sat), sat_count(Sat, Count).
Count = 15339263199580.

Lastly, and maybe most significantly, this approach works for any shape of tiles, and is not limited to squares or rectangles. For example, to handle 1x1 squares and a triangle shape as well as its vertical and horizontal reflections, use the following definition of tile_matrix/1:
tile_matrix([[1]]).
tile_matrix(T) :-
        T0 = [[1,1,1,1],
              [1,1,1,0],
              [1,1,0,0],
              [1,0,0,0]],
        (   T = T0
        ;   maplist(reverse, T0, T)
        ;   reverse(T0, T)
        ).

Allowing each of these shapes to be used between 0 and 7 times on a 9x7 board, I get, after a minute or so, Count = 58665048314 solutions.
Here is one of them, picked at random:

Picking solutions in such a way that each of them is equally likely is also quite easy with CLP(B), even if the number of solutions is too large to enumerate them explicitly.

A: I coded in SWI-Prolog
/*  File:    pack_squares.lp
    Author:  Carlo,,,
    Created: Nov 29 2012
    Purpose: http://stackoverflow.com/questions/13623775/prolog-constraint-processing-packing-squares
*/

:- module(pack_squares, [pack_squares/0]).
:- [library(clpfd)].

pack_squares :-
    maplist(square, [5,4,3,2], Squares),
    flatten(Squares, Coords),
    not_overlap(Squares),
    Coords ins 1..10,
    label(Coords),
    maplist(writeln, Squares),
    draw_squares(Squares).

draw_squares(Squares) :-
    forall(between(1, 10, Y),
           (   forall(between(1, 10, X),
              sumpts(X, Y, Squares, 0)),
           nl
           )).

sumpts(_, _, [], S) :- write(S).
sumpts(X, Y, [[X1,Y1, X2,Y2]|Qs], A) :-
    ( ( X >= X1, X =< X2, Y >= Y1, Y =< Y2 )
    ->  B is A+X2-X1+1
    ;   B is A
    ),
    sumpts(X, Y, Qs, B).

square(D, [X1,Y1, X2,Y2]) :-
    X1 + D - 1 #= X2,
    Y1 + D - 1 #= Y2.

not_overlap([_]).
not_overlap([A,B|L]) :-
    not_overlap(A, [B|L]),
    !, not_overlap([B|L]).

not_overlap(_, []).
not_overlap(Q, [R|Rs]) :-
    not_overlap_c(Q, R),
    not_overlap_c(R, Q),
    not_overlap(Q, Rs).

not_overlap_c([X1,Y1, X2,Y2], Q) :-
    not_inside(X1,Y1, Q),
    not_inside(X1,Y2, Q),
    not_inside(X2,Y1, Q),
    not_inside(X2,Y2, Q).

not_inside(X,Y, [X1,Y1, X2,Y2]) :-
    X #< X1 #\/ X #> X2 #\/ Y #< Y1 #\/ Y #> Y2.

here is the last lines displayed when running ?- aggregate_all(count,pack_squares,C)., notably C counts total placements
...
0002255555
0002255555
[6,6,10,10]
[7,2,10,5]
[4,3,6,5]
[5,1,6,2]
0000220000
0000224444
0003334444
0003334444
0003334444
0000055555
0000055555
0000055555
0000055555
0000055555
C = 169480.

A: For each square, define X and Y variables that denote the upper left corner.
These variable will have domains 1..10-L, where L is the length of the square. If you  set the domain to 1..10, the squares may be placed partly outside your 10x10 rectangle.
Then you can post constraints for each pair of rectangles (X,Y) and (X1,Y1) that state that if they overlap on the x axis, they must not overlap on the y axis, and vice versa:
(((X  #=< X1) and (X+L   #> X1)) => ((Y+L #=< Y1) or (Y1+L1 #=< Y))),
(((X1 #=< X)  and (X1+L1 #> X))  => ((Y+L #=< Y1) or (Y1+L1 #=< Y))),
(((Y  #=< Y1) and (Y+L   #> Y1)) => ((X+L #=< X1) or (X1+L1 #=< X))),
(((Y1 #=< Y)  and (Y1+L1 #> Y))  => ((X+L #=< X1) or (X1+L1 #=< X)))

(your particular constraint syntax may vary)

A: Since version 3.8.3 SICStus Prolog offers a number of dedicated placement constraints that match your packing problem nicely. In particular, as your packing problem is two-dimensional, you should consider using the disjoint2/1 constraint.
The following code snippet uses disjoint2/1 to express that rectangles are non-overlapping. The main relation is area_boxes_positions_/4.
:- use_module(library(clpfd)).
:- use_module(library(lists)).

area_box_pos_combined(W_total*H_total,W*H,X+Y,f(X,W,Y,H)) :-
    X #>= 1,
    X #=< W_total-W+1,
    Y #>= 1,
    Y #=< H_total-H+1.

positions_vars([],[]).
positions_vars([X+Y|XYs],[X,Y|Zs]) :-
    positions_vars(XYs,Zs).

area_boxes_positions_(Area,Bs,Ps,Zs) :-
    maplist(area_box_pos_combined(Area),Bs,Ps,Cs),
    disjoint2(Cs),
    positions_vars(Ps,Zs).

On to some queries! First, your initial packing problem:
?- area_boxes_positions_(10*10,[5*5,4*4,3*3,2*2],Positions,Zs),
   labeling([],Zs).
Positions = [1+1,1+6,5+6,5+9],
Zs        = [1,1,1,6,5,6,5,9] ? ...

Next, let's minimize the total area that is required for placing all squares:
?- domain([W,H],1,10),
   area_boxes_positions_(W*H,[5*5,4*4,3*3,2*2],Positions,Zs),
   WH #= W*H,
   minimize(labeling([ff],[H,W|Zs]),WH).
W         = 9,
H         = 7,
Positions = [1+1,6+1,6+5,1+6],
Zs        = [1,1,6,1,6,5,1,6],
WH        = 63 ? ...

Visualizing solutions
What do individual solutions actually look like?  ImageMagick can produce nice little bitmaps...
Here's some quick-and-dirty code for dumping the proper ImageMagick command:
:- use_module(library(between)).
:- use_module(library(codesio)).

drawWithIM_at_area_name_label(Sizes,Positions,W*H,Name,Label) :-
    Pix = 20,

    % let the ImageMagick command string begin
    format('convert -size ~dx~d xc:skyblue', [(W+2)*Pix, (H+2)*Pix]),

    % fill canvas
    format(' -stroke none -draw "fill darkgrey rectangle ~d,~d ~d,~d"',
           [Pix,Pix, (W+1)*Pix-1,(H+1)*Pix-1]),

    % draw grid
    drawGridWithIM_area_pix("stroke-dasharray 1 1",W*H,Pix),

    % draw boxes
    drawBoxesWithIM_at_pix(Sizes,Positions,Pix),

    % print label
    write( ' -stroke none -fill black'),
    write( ' -gravity southwest -pointsize 16 -annotate +4+0'),
    format(' "~s"',[Label]),

    % specify filename
    format(' ~s~n',[Name]).

Above code for drawWithIM_at_area_name_label/5 relies on two little helpers:
drawGridWithIM_area_pix(Stroke,W*H,P) :-   % vertical lines
    write(' -strokewidth 1 -fill none -stroke gray'),
    between(2,W,X),
    format(' -draw "~s path \'M ~d,~d L ~d,~d\'"', [Stroke,X*P,P, X*P,(H+1)*P-1]),
    false.
drawGridWithIM_area_pix(Stroke,W*H,P) :-   % horizontal lines
    between(2,H,Y),
    format(' -draw "~s path \'M ~d,~d L ~d,~d\'"', [Stroke,P,Y*P, (W+1)*P-1,Y*P]),
    false.
drawGridWithIM_area_pix(_,_,_).

drawBoxesWithIM_at_pix(Sizes,Positions,P) :-
    Colors = ["#ff0000","#00ff00","#0000ff","#ffff00","#ff00ff","#00ffff"],
    write(' -strokewidth 2 -stroke white'),
    nth1(N,Positions,Xb+Yb),
    nth1(N,Sizes,    Wb*Hb),
    nth1(N,Colors,   Color),
    format(' -draw "fill ~sb0 roundrectangle ~d,~d ~d,~d ~d,~d"',
           [Color, Xb*P+3,Yb*P+3, (Xb+Wb)*P-3,(Yb+Hb)*P-3, P/2,P/2]),
    false.
drawBoxesWithIM_at_pix(_,_,_).

Using the visualizers
Let's use the following two queries to produce some still images.
?- drawWithIM_at_area_name_label([5*5,4*4,3*3,2*2],[1+1,6+1,6+5,1+6],9*7,
                                 'dj2_9x7.gif','9x7').

?- drawWithIM_at_area_name_label([5*5,4*4,3*3,2*2],[1+1,1+6,5+6,5+9],10*10,
                                 'dj2_10x10.gif','10x10').

Let's use the following hack-query to produce an image for each solution of the placement of above rectangles on a board of size 9*7:
?- retractall(nSols(_)),
   assert(nSols(1)),
   W=9,H=7,
   Boxes = [5*5,4*4,3*3,2*2],
   area_boxes_positions_(W*H,Boxes,Positions,Zs),
   labeling([],Zs),
   nSols(N),
   retract(nSols(_)),
   format_to_codes('dj2_~5d.gif',[N],Name),
   format_to_codes('~dx~d: solution #~d',[W,H,N],Label),
   drawWithIM_at_area_name_label(Boxes,Positions,W*H,Name,Label),
   N1 is N+1,
   assert(nSols(N1)),
   false.

Next, execute all ImageMagick commands output by above queries.
At last, build an animation of the solution set of the third query using ImageMagick:
$ convert -delay 15  dj2_0.*.gif   dj2_9x7_allSolutions_1way.gif
$ convert dj2_9x7_allSolutions_1way.gif -coalesce -duplicate 1,-2-1 \
          -quiet -layers OptimizePlus -loop 0 dj2_9x7_allSolutions.gif

Results
First, one solution for board size 10*10:
Second, one solution for a board of minimum size (9*7):
Last, all solutions for a board of minimum size (9*7):

Edit 2015-04-14
Since version 7.1.36 the SWI-Prolog clpfd library supports the constraint disjoint2/1.
Edit 2015-04-22
Here's a sketch of an alternative implementation based on the tuples_in/2 constraint:

*

*For each pair of boxes determine all positions at which these two would be non-overlapping.

*Encode the valid combinations as lists of tuples.

*For each pair of boxes post one tuples_in/2 constraint.

As a private proof-of-concept, I implemented some code following that idea; like @CapelliC in his answer, I get 169480 distinct solutions for the boxes and board-size the OP stated.
The runtime is comparable to the other clp(FD) based answers; in fact it is very competitive for small boards (10*10 and smaller), but gets a lot worse with larger board sizes.
Please acknowledge that, for the sake of decency, I refrain from posting the code:)

A: Here is a solution where disjoint only takes one line:
% disjoint(+Rectangle, +Rectangle)
disjoint([XA1,XA2,YA1,YA2],[XB1,XB2,YB1,YB2]) :-
   XB1 #>= XA2 #\/ XA1 #>= XB2 #\/
   YB1 #>= YA2 #\/ YA1 #>= YB2.

The model setup and labeling works as follows:
% squares(-List)
squares(L) :-
   maplist(square, [2,3,4,5], L),
   term_variables(L, V),
   place(L),
   label(V).

% square(+Integer, -Rectangle)
square(S, [X1,X2,Y1,Y2]) :-
   X1 in 0..8,
   X2 in 1..9,
   Y1 in 0..6,
   Y2 in 1..7,
   X2 #= X1+S,
   Y2 #= Y1+S.

% place(+List)
place([]).
place([A|L]) :-
   place(L, A),
   place(L).

% place(+List, +Rectangle)
place([], _).
place([A|L], B) :-
   disjoint(A, B),
   place(L, B).

Here is an example run:
Jekejeke Prolog 3, Runtime Library 1.3.7 (May 23, 2019)

?- squares(L), show(L).
555554444
555554444
555554444
555554444
55555333.
22...333.
22...333.
L = [[0,2,5,7],[5,8,4,7],[5,9,0,4],[0,5,0,5]]

redpajama_set_name: RedPajamaStackExchange


I was about 8 when I first learned to bike. My dad would take me out on our street in Baltimore, grasping the frame to make sure I didn't lose my balance as I shakily pedaled. I didn't get it right away–that is, until I got it. One afternoon I took my little bike out by myself, hopped on, and just cruised around and around our cul de sac. I might have wobbled, but I didn't fall. I still remember the feeling of elation that whipped through me.
That feeling around biking has only grown as I've gotten older. I owned a Motobecane in Chicago that I loved the way some people love their pets, even when the fork snapped and sent me tumbling in a freak accident just off Lawrence Ave. I rode that bike to class every day; I rode it countless times to the other side of the city, traversing its streets. Much of how I got to know, and love, Chicago was by bike.
Biking in a city creates a uniquely close engagement with the urban landscape. You're not sequestered inside two tons of steel: you feel the beating sun, the rain, every bump in the road, on two wheels. It allows you to take in wide swaths of the city that would be impossible to cover by foot.
Biking in Chicago enabled a constant process of discovery that ultimately made me feel deeply connected to the city. There was always another neighborhood to explore, a new side street to roll down. It empowered me with independence and the knowledge that I could get myself around my city.
There's something magical, and freeing, about coasting at top speed on a bike–a sentiment straight from age 8. When I think about moments of pure, unfettered happiness in the last few years, many of them came on a bike. Riding a bike frequently allows me to think through things and to clear my head. It's a socially acceptable way to spend a lot of time alone.
It's also a fantastic way to spend time with friends, particularly those who know the city and its bike routes better than you (thanks, Rafael). I want to say something horribly cliche about how it's all about the (bike) journey and not the (bike) destination, but this was actually true of my life in Chicago. The opportunity to just go for a ride was always as big a draw as wherever we were going to end up.
Speaking of community, I've been heartened to see how much bike activity there is here in Detroit. One way to make the streets safer for cycling is to get more people out there doing it. I've been going on the weekly Slow Roll rides, the most recent of which drew 1500 people. I've already made new friends and seen more of Detroit in 3 weeks than I otherwise would have.
So these are all the sunny feelings that underlie my decision to do Motor City car-less, at least for now. I didn't talk about the countless near-misses of almost getting side-swiped or doored by cars, and the sheer luck of having avoided any major accident thus far. I also didn't mention how having a bike as my primary mode of transport constrains my ability to go places and sometimes necessitates me to rely on the kindness of friends–and how these limitations on my independence are endlessly frustrating. And I didn't talk about the implications of that decision for my personal safety in this city.
I don't have easy answers for these issues, which is partially why I get defensive when people question my choice to go car-less in Motor City. All I can say is that for now–and particularly being in a new place, with the ability to consciously shape my persona–biking forms a significant part of my identity. I love riding, and care about making the city more bike-friendly. And I hope and expect that biking will bring me closer to the place where I'm living but don't yet call home.
Detroit's in Shambles, and I Can't Wait to Move There.


Ctf leroy computer desk writing home office with glass top decorations. Brayden studio menelaus a frame reclaimed solid elm wood writing pertaining to glass top desk idea. New deal alert walker edison in modern glass top writing desk pertaining to prepare. Mats theselius herbarium writing desk in glass top idea. Ava metal desk pottery barn for glass top writing decor.
Glass top small writing desk. Thick glass top writing desk. Orpha glass top writing desk. Glass top writing desk. Amazon com flash furniture brettford desk with tempered glass top pertaining to writing ideas.


Las Vegas, NV (USA) – The Ultimate Fighting Championship® (UFC®) organization is proud to confirm the remaining bouts on the historic final card of the year – UFC 92: THE ULTIMATE 2008, live from the MGM Grand Garden Arena in Las Vegas, Nevada on Saturday, December 27, 2008. The already stacked fight card is rounded out with a brilliant batch of exciting mixed martial artists.
It's a matchup between two highly-touted middleweight newcomers as New Jersey's Mike Massenzio (6'2"/185 lbs., fighting out of Paterson, N.J.) meets The Ultimate Fighter® Season 7 finalist CB Dollaway (6'2"/185 lbs., fighting out of Tempe, Ariz.). This will not be the first time these two have met in competition. Dollaway, a former NCAA Division I wrestler and Ohio-born fighter, defeated the Teaneck native at the Junior college wrestling nationals.
If Lebanon-born fighter Mostapha Al Turk (6'2"/242 lbs., fighting out of London, England) is to win his UFC debut it will have to come against a brand name in the heavyweight division. Cheick Kongo (6'4"/240 lbs., fighting out of Paris, France) looks to improve his UFC record to 5-2 when he faces the 35-year-old heavyweight.
A very well respected ground fighter, Dean Lister (6'1"/185 lbs., fighting out of San Diego, Calif.) owns UFC submission victories over Alessio Sakara and grappling wiz Jeremy Horn; but the Brazilian jiu-jitsu black belt will have to excel in all areas if he is to beat perpetual contender Yushin Okami (6'2"/185 lbs., fighting out of Kanagawa, Japan), who holds a 6-1 UFC record with one loss coming against former UFC middleweight champion Rich Franklin.
For an exciting match in the heavyweight division, look no further than Weesp, Holland's Antoni Hardonk (6'4"/245 lbs., fighting out of Amsterdam and Los Angeles, Calif.). The Dutch kickboxing specialist is on a two-fight win streak with devastating stoppages over Colin Robinson and Eddie Sanchez. But now the 32-year-old turns his attention to Celina, Ohio's Mike Wessel (6'0"/260 lbs., fighting out of Little Rock, Ark.). A former assistant strength and conditioning coach for the University of Arkansas, Wessel has won eight of his first nine professional bouts.
Looking to rebound from a loss to Franklin at UFC 88, Loveland, Ohio's Matt Hamill (6'1"/205 lbs., fighting out of Utica, N.Y.) will put his top tier wrestling ability and improved striking up against former three-time NCAA Division I wrestler and Minot, North Dakota native Reese Andy (5'10"/205 lbs., fighting out of Renton, Wa.).
One of the few men to ever beat current UFC middleweight champion Anderson Silva, welterweight Ryo Chonan (5'9"/170 lbs., fighting out of Yamagata City, Japan) always looks to dazzle the crowd. Chonan is coming off a split decision victory against Roan Carneiro and will try to extend the win streak to two when he faces Los Angeles, California's Brad Blackburn (5'10"/170 lbs., fighting out of Olympia, Wa.), who earned a second-round TKO in his UFC debut.
It's a matchup between two decorated kickboxers as Pat Barry (5'11"/235 lbs, fighting out of Milwaukee, Wis.) faces Dan Evensen (6'3"/250 lbs., fighting out of Las Vegas, Nev.). Originally from Norway, the 10-3 Evensen will look to put the first blemish on the New Orleans fighter's 3-0 record.
Tickets for UFC 92: THE ULTIMATE 2008 are still on sale and will be available at the MGM Grand Garden Arena Box Office, all Ticketmaster Ticket Centers, Charge-By-Phone at (702) 474-4000 or online at ticketmaster.com.
UFC 92: THE ULTIMATE 2008 is available live on pay-per-view at 10 p.m. EST/7 p.m. PST on iN DEMAND, DIRECTV, DISH Network, TVN, Bell ExpressVu, Shaw Communications and Viewer's Choice Canada for a suggested retail price of $44.95 for standard definition or high-definition broadcasts (where available).
For more information on UFC 92 and the Ultimate Fighting Championship, visit UFC.com.


Doncaster Rovers zoomed up to 11th in League One courtesy of a thumping win at play-off chasing Southend.
Darren Ferguson's side were dominant almost throughout the game as they extended their unbeaten away record to six games in some considerable style.
Rovers enjoyed much the better of the first period at Roots Hall and deservedly led 1-0 at the interval.
The breakthrough didn't arrive until the 44th minute, though.
The recalled Nathan Tyson went on a surging run before crossing in low for Andy Williams, who rifled in an effort from the tightest of angles high into the roof of the net.
That was the in-form Williams' 13th goal of the season, and his 10th in 12 matches.
Earlier the Shrimpers' goalkeeper Dan Bentley was twice tested by Craig Alcock and then skipper James Coppinger as the visitors made an excellent start to the game.
Andy Butler headed narrowly over the top, while at the other end Thorsten Stuckmann had to be at his agile best to keep out Jack Payne's deflected strike.
Rovers came agonisingly close to doubling their lead just two minutes after the restart.
Paul Keegan did well to find space on the edge of the Southend box before drilling in a superb shot which struck the outside of a post before going behind.
The deserved second goal came in the 55th minute. This time Aaron Taylor-Sinclair volleyed home off the underside of the crossbar as he dived in to meet Grant's precise corner-kick.
Three minutes later it was 3-0. Williams - the hosts' tormentor-in-chief all afternoon - was bundled over by Adam Thompson, and referee Mr Collins pointed to the spot.
Up stepped Tyson to coolly beat Bentley and register his fifth goal of the season.
Cedric Evina and Paul Keegan both came close to adding to Rovers' score late in the game as the visitors coasted to victory.
Southend (4-4-2): Bentley; White, Thompson, Barrett, Coker; Rea, Leonard, Atkinson, Payne; Mooney, Hunt. Subs: T Smith, Prosser, Worrall, McLaughlin, Deegan, Pigott, O'Neill.
Doncaster (3-5-1-1): Stuckmann; Alcock, Butler, Taylor-Sinclair; McCullough, Coppinger, Keegan, Grant, Evina; Tyson; Williams. Subs: Marosi, Chaplow, Mandeville, Lund, Middleton, J McKay, MacKenzie.