text:
Danielle Dubois appointed Director, Building Services
I am delighted to announce the appointment of Danielle Dubois to the position of Director, Building Services, Faculty of Medicine, McGill University.
Reporting to the Executive Director of the Faculty of Medicine, Ms. Dubois will oversee all Faculty building operations. She will be responsible for the Faculty's 27 buildings and locations, including new construction, renovations and maintenance. In addition to managing the Building Services team, she will ensure the smooth usage of research, teaching and administrative space.
Ms. Dubois will participate in the strategic planning of the Faculty's building and facilities operations. She will also serve as liaison between the Faculty and departments, Facilities Development, Facilities Management, Campus Space and Planning Office, and Waste Management.
Before joining McGill, Ms. Dubois was Associate Director of Finance for the Ministry of Health and Social Services, in support of all projects with respect to the modernization of Montreal university hospitals. Before that, she worked at the Société de transport de Montréal as Infrastructure Program Director.
Ms. Dubois graduated from École Polytechnique de Montréal in 1989 with a Bachelor's degree in Engineering. She then obtained a certificate in Law from Université de Montréal and later an MBA from HEC-Montréal. In 2015, she earned a graduate diploma in Corporate Finance from Université du Québec à Montréal.
Please join me in welcoming Ms. Danielle Dubois to this position and in wishing her continued success in her endeavours.
Pascale Mongrain, CPA-CA, Lawyer
Executive Director, Faculty of Medicine


What is everyone using to power there ESpixel strips? With only being able to run 170 pixels should not need a 350 watt power supply.
You should be able to run 4 full universes off of the ESPixelStick. We are running 14 of them this year driving 45 100 pixel tomato cage mini trees. We have 3 of those 14 running 500 pixels with no problems. We went a little on the cheap side for power supply and went with these from Amazon, https://www.amazon.com/gp/product/B00D7CWSCG. We are running them all off of unicast with a dedicated wireless router and on their own subnet with a pi 3b+ driving them all.
The one I am using states 170 nodes. What are you using?
I have a bunch of those that I have yet to assemble and try out. Supposedly if you use the ESPixelStick firmware from https://github.com/forkineye/ESPixelStick they should support 4 universes, at least that is what others have told me, but your mileage may vary. The 14 we are using currently are the ones by the same person who makes the firmware, https://www.amazon.com/gp/product/B072XT1V77. They work quite well in a single yard, but sometimes lag in our cul-de-sac but we are probably pushing them way beyond what wifi should do since the furthest ones are almost 200 feet from the router. But I think since they all use the same wifi chip it wouldn't matter what we tried using.
I really need to put a couple of those Renard Plus ones together before the end of the season to see if we can pump more than 170 pixels through them.
I have a few ESPixelSticks in use indoors this year and went on the really cheap side at the local Goodwill 50%-off day and picked up 12V and 9V power supplies that put out ~4A each. That is well more than I need for the 32 pixels each ESPixelStick controls.
I was finally able to setup my ESPixelStick ver 2.0, after I changed the IP Address to static I went to the Device Configuration Page. I says 1 universe 170 nodes, I see others running way more then a universe. Here is what I want to do,run 5 Bosocoyo 48 Candy Canes. That would be 240 nodes well over 1 universe. So do I go to the Device Configuration Page & change the universe to 2 & node count to 248?
No leave the universe as 1 and change the pixel count to what the pixel count will be. The universe is the start universe. It will auto calculate the end universe.


text:
January 2022 December 2021 November 2021 October 2021 September 2021 August 2021 July 2021
TRAI paves the way for digital broadcasting in India
Dean C. Gibbs	 Feb 1, 2018
The Telecommunications Regulatory Authority of India (TRAI) has submitted its recommendations on digital broadcasting in India, paving the way for FM radio companies to enter the new market. India has 322 FM radio…

redpajama_set_name: RedPajamaCommonCrawl


Raj Foods International was established in the year 1976 and is one of the leading manufacturers of Hulled Sesame seeds and other spices supplying to the agents and export houses in the country, for ultimate export to rest of the world. In line to provide the best of all, Raj Foods is ready to launch its international quality produce in the market with the support of esteemed organization as of yours.
With thirty two years of experience, the company has gained immense expertise for processing, administration, marketing and exporting products to different countries.
We have built our reputation in the market by honoring our contracts and providing prompt delivery, reliable quality and its best services. Our in-house research & development facilities also help us in conducting regular market surveys, in analyzing market trends and understanding the specific needs of our clients. This in depth study and understanding assists us to bring necessary changes in our range and in ensuring that our products meet the expectations of our global clients.
- Customer orientation. Our primary objectives are to understand and satisfy the requirements of our present and future customers and to exceed their expectations.
- Excellence. By means of a modern management philosophy, characterised by continual improvement and total involvement, Raj Foods aspires to excel in all areas of its activity.


Imagine having a twin split out of you in twenty minutes flat; each of you split again in another twenty minutes. In a scant few hours, there are billions of you. This happens with bacteria every day in almost every environment one can imagine. Just what is this domain of life? Why are bacteria important to our global ecosystem? Are they always dangerous? Let's learn to be scientifically conversational.
1) What is a bacterium? How are they different than humans?
a. What is a bacterium? Microscopic, single-celled organisms. They do not have different internal compartments like Eukaryotic cells (human cells, plant cells, yeast cells, for example). They have a cell wall of some thickness, unlike human cells. They can be found in all manners of locations (mountains, oceans, inside of animals, frozen in ice, just about everywhere). There are likely 1 trillion different types of microbes on Earth and 99.999 percent have yet to be discovered.
b. What do bacteria need to live? Some require oxygen to make energy, some don't. Some require organic carbons (like decaying material or being able to do fermentation) and some don't (can use carbon dioxide as a source of inorganic carbon which can be fueled by light energy). Bacteria acting as decomposers are quite critical to our environment as we know it.
c. Why are bacteria important to our global ecosystem? It is unlikely that life as we know it would exist without bacteria. Organic carbon would remove all of the carbon dioxide in the atmosphere if bacteria didn't break them down and decompose them. If there was no carbon dioxide, plants could not photosynthesize. This immediately would cause a trophic breakdown where primary producers would be gone and trophic predators (including humans) would immediately starve to death and die out. Decomposition on its own releases nutrients into the environment that can be used for a myriad of purposes. Bacteria are also quite important for nitrogen fixation (making nitrogen that is usable for plants).
d. Are bacteria yeast? Or fungi? No, neither! Fungi are Eukaryotes, not bacteria. Just because something is single-celled doesn't mean it's a bacterium. Amoebas, yeast, and members of Archae are not bacteria.
a. Germ Theory and Robert Koch: Once upon a time, illness as believed to have come from "evil spirits" or foul orders. It was once incredibly rare to have children live to adulthood. Louis Pasteur (1822 – 1895) was an unparalleled scientist in many ways, studying bacteria, diseases of beer and wine, anthrax, cholera, silk blight, etc. Robert Koch (1843 – 1910, 1905 Nobel Prize for Physiology or Medicine) was famous for many other discoveries but is now well known for developing Koch's postulates. Both men independent worked to show that Bacillus anthracis was responsible for producing anthrax; Koch's postulates came from showing that cultures of bacteria from blood of infected animals could be communicable (using mice as model organisms).
ii. These postulates are flawed: The cholera causing agent Vibrio cholerae could be isolated from both sick and health people (against postulate 2). Many viruses do not cause illness in all individuals (postulate 1) and infections with the same virus can cause different illness (PV infection only causes paralytic disease in 1% of the infected). It is challenging to grow all disease-causing microbes in pure culture (2 and 3). There are now more up-to-date postulates for the 21st century by David Fredricks and David Relman from Stanford University School of Medicine.
b. Bacteria have a fossil record: Yes, they're small, but they can leave fossils. Specifically, cyanobacteria have left fossil records back to the Precambrian (3.5 billion years old) which dates among some of the oldest known fossils. They also have a property that allows them to form large, layered structures (which reminds us of biofilms, which we will discuss next week!). Cyanobacteria are aquatic and are capable of photosynthesizing. They were incredibly important for the oxygen atmosphere that we so appreciate today. Large mats of the bacteria are called "blue-green algae", but once again do not confuse bacteria with algae. They are not eukaryotes. Additionally, the chloroplast that plants use to photosynthesize is essentially a cyanobacterium that lives within the plants' cells. We'll discuss this more in the episode about the endosymbiotic theory.
3) Why are bacteria useful in molecular biology? Why are they potentially dangerous?
a. Useful, molecular cloning: We have already discussed in episode two how bacteria are capable of being used for molecular cloning. Still, it bears repeating that E. coli is capable of dividing into two separate cells in 20 minutes, even though it takes 40 – 90 minutes to replicate its genome. What is seen is that when each daughter chromosome segregates into the daughter cells, they're already partially replicated for their next daughter cells. The rapidity of E. coli replication is one of the reasons that they've become so useful for molecular biology, like insulin production.
b. Useful, CRISPR: Clustered Regularly Interspaced Short Palindromic Repeats, or CRISPR, are a bacterial defense system (though originally discovered in archaea). Viruses that infect bacteria, called bacteriophage, can be prevented by leaving remnants of their genetic code in the host bacterium. Essentially, that allows for the system to be a genetic memory that helps the cell detect and destroy those viruses. Since then, humans have used elements of CRIPSR to edit genomes of mouse and human cells with precision and ease.
c. Dangerous: Many bacteria cause disease or illness: salmonella from Salmonella typhimurium (recently in the news due to a rash of outbreaks from pet hedgehogs), Vibrio cholerae (cholera, a diarrheal illness caused by some strains like O1 or O139), Legionnaires disease from Legionella pneumophila (famous for a rash of deaths in Philadelphia in 1976 from inhaling bacteria on small droplets of water in the air), or typhoid fever (Salmonella typhi). It is important to remember that while there are many bacteria that elicit fear because of symptoms, a majority of bacteria have no ill effects and many live on us and in us.
a. Quorum sensing: Bacteria may be single-celled organisms but they are capable of speaking to one another. Essentially, they do this in a way that is somewhat similar to how our cells (human cells) speak to one another, like how we discussed insulin being a hormone in episode 2. They use signaling molecules and are capable of measuring the number of molecules in the area, which allows for greater flexibility of communication. We will discuss more about quorum sensing next week when we discuss biofilms.
b. The human microbiome: Briefly discussed in episode four, the microbiome is a community of important groups that play roles in keeping our bodies healthy. These microorganisms include not only bacteria but fungi, parasites, and viruses. This is another great example that not all microorganisms are dangerous and we rely on many (dangerous and not) to coexist in our bodies. This microbiome stimulates the immune system, helps us digest food, synthesizes vitamins and amino acids, break down starches and fibers. We will discuss the microbiome in more detail when we discuss Crohn's disease and related illnesses.
a. Is all E. coli dangerous? Just as all of the other topics we've touched on today, the answer is no. Most E. coli are harmless and are important for the human intestinal tract and to be a part of the microbiome. However, if the bacteria got out of the intestinal tract it could cause issues in a different location. One of the more famous examples of dangerous E. coli is Shiga toxin-producing E. coli, which can cause stomach cramps, diarrhea, and vomiting.
b. How do bacteria move? Some have thin, whiplike structures called flagella that rotate like a boat engine to push the cell forward. Some have pili, small hook like appendages that bacteria use to pull themselves along. Some join biofilms, which we will discuss in episode 15.


I have yet to try using a gamepad or anything like that.
Navigating the Mac OS X menu freezes ZSNES.
There's random audio garbage when it first starts up.
Entering/exiting fullscreen messes up the palette (see picture above).
Horrible things happen when changing the video mode.
If you want to try it out, here it is. This is a modified version of ZSNES, designed to work under Mac OS X 10.6 - which means you can drag ROMs onto it.
Note that it's only compiled for Mac OS X 10.6 - I don't have a Mac with 10.5 to test on, so right now, it's 10.6 only.
Hi, this is awesome! Have you thought about putting this into a GitHub repo?


Severe nut allergies- pecans, walnuts, almonds, sunflower seeds. Label ingelredients if possible? I will be there this wed. Thanks!
[Comment] => Severe nut allergies- pecans, walnuts, almonds, sunflower seeds. Label ingelredients if possible? I will be there this wed. Thanks!


text:
26 changes to the cabinet - some good, some awful
Posted 28 February 2018 Written by City Press
Category Politics
Perhaps the best news in the cabinet reshuffle announced on Monday by President Cyril Ramaphosa is that Nene is back at the finance ministry, and Pravin Gordhan gets to run public enterprises. Zwane is gone as mining minister, replaced by fiery trade unionist Gwede Mantashe. Most of those ministers with links to the Guptas are gone, except Gigaba - who has been moved from finance to his old portfolio of home affairs (where he famously imposed new visa rules, causing a slump in tourism and a loss of billions to the economy). You have to scratch your head at some of the appointments, which suggest there is still a Zuma gun pointed at Ramaphosa's head. City Press looks at the reshuffle.
President Cyril Ramaphosa has brought back Nhlanhla Nene to head Treasury – 26 months after Jacob Zuma unceremoniously dumped him and appointed an unknown backbencher, Des van Rooyen, as finance minister in December 2015, plunging the rand to record lows.
Nene, who will be deputised by the former mayor of Ekurhuleni, Mondli Gungubele, is one of 26 new executive appointments announced by Ramaphosa on Monday night. All the ministers accused of having links to the notorious Gupta family, with the exception of Malusi Gigaba, were sacked. Gigaba who delivered the national budget speech last Wednesday goes back to home affairs.
Other changes saw Nomvula Mokonyane becoming the voice of government in her new role as communications minister. Cabinet veteran Jeff Radebe, who has been in the executive since 1994, becomes the new minister of energy, another veteran Lindiwe Sisulu, who was touted among candidates for deputy president of the republic becomes international relations and cooperation minister. Former science and technology minister Naledi Pandor takes over the troubled higher education portfolio.
Newly elected ANC chairperson Gwede Mantashe is the new mineral resources head, with former mayor of Cape Town Nomaindia Mfeketo, who has been international relations deputy minister since 2014, being appointed as the new human settlements minister. Bheki Cele who served as national police commissioner between 2009 and 2012 is the new sheriff in town as minister of police.
Pravin Gordhan and Derek Hanekom, who have openly spoken out against Zuma over the past year and campaigned for Ramaphosa ahead of the ANC's national conference, are back in the Cabinet. Gordhan takes over the embattled public enterprises portfolio and Hanekom goes back to Tourism.
Blade Nzimande is another returnee as he takes over transport while Ayanda Dlodlo, who served for a few years as public service and administration deputy minister, becomes the head honcho of that department. It's also her third move in less than a year.
Thulas Nxesi goes back to public works which he headed since 2014 until his appointment to sports and recreation in the midnight reshuffle of March 31 last year. The ANC women's league's Thokozile Xasa takes over at sport.
Maite Nkoana-Mashabane, who survived the numerous Zuma reshuffles since 2009, has been moved to the contentious rural development and land reform portfolio in a year where land expropriation without compensation is the buzz word. Mmamoloko Kubayi-Ngubane is also moving to her third portfolio in 11 months – from energy to communications and now science and technology. Susan Shabangu swaps portfolios with ANC women's league president and outgoing social development minister Bathabile Dlamini, who becomes the new minister in the presidency responsible for women.
Nkosazana Dlamini-Zuma is another minister in the presidency. She will be responsible for planning, monitoring and evaluation. The deputy minister of public service and administration, Dipuo Letsatsi-Duba, takes over from Bongani Bongo as the new minister of state security. ANC veteran Gugile Nkwinti will have to tackle the ongoing drought crisis as the new minister of water affairs and sanitation.
Sifiso Buthelezi, who has been the deputy minister of finance for the past year, will become the new deputy minister of agriculture, while Cassel Mathale becomes the deputy minister of public service and administration. Pinky Kekana becomes the deputy minister of communications and Chana Pilane Majake takes over as the deputy minister of public service and administration.
Ramaphosa has appointed former ANC treasurer-general Zweli Mkhize as the new minister of cooperative governance and traditions affairs pending his swearing-in as a member of Parliament. David Mabuza, the deputy president of the ANC, will also be sworn into Cabinet and will take over as the new deputy president of the republic.
Ramaphosa said the changes were intended to ensure that national government was better equipped to implement the mandate of his administration and specifically the tasks identified in the state of the nation address: "In making these changes, I have been conscious of the need to balance continuity and stability with the need for renewal, economic recovery and accelerated transformation.
"As indicated in the state of the nation address, we have begun a review of the configuration, size and number of national ministries and departments. We will retain the existing ministries and departments until that review is completed," said Ramaphosa.
Ramaphosa's dramatic move was welcomed by the ANC but opposition felt it showed that he was weak and not in control of the party.


Should I see a physical therapist or physiotherapist to treat multiple sclerosis?
No matter which type of MS you have, ask your doctor to refer you to a physical therapist or physiotherapist. He can help you build an exercise program that's right for you.
United Spinal Association: "Primary Progressive Multiple Sclerosis: Understanding the Differences."
National Multiple Sclerosis Society: "What we know about primary progressive MS."
Multiple Sclerosis Association of America: "Primary progressive multiple sclerosis: What you need to know."
Up-To-Date: "Treatment of progressive multiple sclerosis in adults."
How fast should I start exercising to treat multiple sclerosis?
What are common symptoms of primary progressive multiple sclerosis (PPMS)?
How does primary progressive multiple sclerosis (PPMS) develop over time?
How many people have primary progressive multiple sclerosis (PPMS)?
How is primary progressive multiple sclerosis (PPMS) diagnosed?
What are the symptoms of primary progressive multiple sclerosis (PPMS)?


text:
Minor in French Studies
UNLV students find that a specialty in French language and culture hones their language skills and prepares them for careers in business, the hotel industry, education, international studies, and science and technology.
Requirements for a Minor in French Studies at UNLV consist of a minimum of 18 credits of FREN or WLC coursework. These may include FREN 213 and FREN 214. The 12 remaining credits are to be at the upper division (300-400) level, six of which must be in composition and conversation. Students earning minors must take at least one literature course.
Students will be able to engage in conversation, provide and obtain information, express feelings and emotions, and exchange opinions.
Students will be able to understand and interpret written and spoken language on a variety of topics.
Students will be able to present information, concepts and ideas to an audience of listeners or readers on a variety of topics.
Students will be able to demonstrate an understanding of the relationship between the practices and perspectives of the cultures studied.
Students will be able to demonstrate an understanding of the relationship between the products (artifacts) and perspectives of the cultures studied.
Students will be able to reinforce and further their knowledge of other disciplines through the foreign language.
Students will be able to acquire information and recognize the distinctive viewpoints that are only available through the foreign language and its cultures.
Students will be able to demonstrate understanding of the nature of language through comparisons of the language studied and their own.
Students will be able to demonstrate understanding of the concept of culture through comparisons of the cultures studied and their own.
Students will be able to use the language both within and beyond the school setting.
Students will be able to show evidence of becoming life-long learners by using the language for personal enjoyment and enrichment.
The French Language and Business
France is one of the world's largest economies.
France is the #1 destination for tourists. The number of people visiting France annually is greater than its population.
At least 3,000,000 Americans travel to Frenchspeaking destinations every year. French speaking European countries include Belgium, Switzerland, Luxembourg and Monaco.
In over two dozen African countries, French is the official language of business and trade.
French is an official language of Canada, a major U.S. trading partner. Montreal is the second largest French-speaking city in the world, and U.S.-Canadian trade is the largest two-way trade in the world.
Over 2,400 French companies employ nearly 650,000 workers throughout the U.S.
France and the U.S. have long shared aerospace technology. French astronauts participate in U.S. space flights and the French Ariane rocket has launched American satellites. France has the world's second largest aeronautics industry. All U.S. Coast Guard helicopters are made by Aerospatiale in Toulouse.
France plays a major international role in medicine and science. The greater Paris area has the highest concentration of mathematicians in the world. The Human Genome Project is located in Paris.
FREN 213
Department of World Languages and Cultures


The Algonquin Regional High School boys' basketball team shot lights out the evening of Thursday, Jan. 31, and the Tomahawks' high-powered and potent offensive attack was too much for Leominster.
The Tomahawks scored 51 points and buried nine 3-pointers in the first half alone, while seeing three players score more than 20 points during a 79-66 triumph over the Blue Devils at the Leominster High gym.
Algonquin senior forward Nicholas Redden dropped 13 of his game-high 23 points in the first quarter, as he finished with five treys. Freshman forward Alex Karaban (22 points, two 3-pointers) dropped 13 points in the second frame and finished with a pair of old-fashioned three-point plays, while senior guard Brian Duffy recorded 14 of his 22 points in the first half.
Leading the charge for the Devils was senior center Givensky Pierre-Louis, who dropped a team-high 17 points, while junior guard Jeremiah Paulino buried a trio of 3-point shots en route to a 15-point effort. Junior center Janier Cora Huetas played a strong game in the low post off the bench for the hosts, chipping in with 11 points.
The Tomahawks raced out to an 18-11 lead with three minutes remaining in the opening quarter on a left-baseline three-ball by Redden. Huetas converted a layup with 12 seconds remaining for Leominster, trimming the deficit down to 19-15 after one.
Junior guard Trevon LeBlanc pulled the Devils to within 29-28, as he converted a four-point play from the left of the arc with 5:31 left. Algonquin can score points in bunches, and it demonstrated that in the late moments of the half, as Karaban and Duffy buried back-to-back treys, and then junior guard Artem Segarra found the bottom of the net on back-to-back attempts from deep, pushing the Tomahawks' lead up to 41-28 with 3:05 on the clock. The lead ballooned up to 49-29 with 1:35 left on a fadeaway jumper out of the post by Karaban, capping a 20-1 surge. Algonquin led 51-34 at halftime.
In the late moments of the first half and early moments of the third quarter, Leominster made a push and got the lead down to 52-43 on a turnaround jumper by Pierre-Louis, which concluded a 14-3 run. The Devils were not able to get any closer in the second half, and then Karaban tallied an old-fashioned three-point play with 45 seconds left, giving the visitors a 67-49 advantage heading into the final eight minutes.


text:
Q: ''More than one row returned by a subquery used as an expression'' postgres error I am trying to realize a postgres request :
select distinct nom_reg_12
from region_15,repartition
where st_intersects(region_15.geom,
                   (select geom
                   from repartition
                   where id_espece='Tetrarti'))=true;

but i get the following error :

More than one row returned by a subquery used as an expression

in the first time I tried this and it work fine :
select distinct nom_reg_12
from region_15,repartition
where st_intersects(region_15.geom,repartition.geom)=true;

and then I tried this a part to get the geometry I want :
select geom from repartition where id_espece='Tetrarti'

A: you can move your condition outside of the subquery.
ST_Intersects works on 1 row (for each geometry) at a time, so if you use a subquery it must also return just one row, and you probably have more than 1 'Tetrarti' row
select distinct nom_reg_12
from region_15,repartition
where id_espece='Tetrarti'
and st_intersects(region_15.geom,
                   repartition.geom)=true;

redpajama_set_name: RedPajamaStackExchange


Boston, MA – IQPC recently announced the Pharmaceutical Traceability Forum will be taking place March 30 – April 1 in one of the world's major supply chain hubs, Boston, MA. Leading industry experts will gather to share their experiences in building a secure serialization program for their organization throughout the three day Forum program.
Several of the anticipated sessions include "Building a Comprehensive Traceability System to be Prepared for Global Regulatory Updates" led by Pfizer, "Preparing for Speed-Bumps Within Your Supply Chain; Mapping a Plan of Action in the Early Stages of Implementing Your Serialization Strategy" led by Novartis, and "Building Upon the GS1 Standards for Serialization; An Update of the State of the Industry and How to Pave the Way for Your Companies' Global Compliance Efforts" led by GS1 US, just to name a few.
IQPC produces 1,500 global events that are custom-tailored to the unique needs of business executives. Founded in 1973, IQPC leverages an office network that spans six continents and a wealth of intellectual capital to provide an unparalleled portfolio of conferences and seminars. For more information, please visit www.iqpc.com.


text:
Mid Atlantic Arts Announces Retirement of Executive Director Theresa M. Colvin
Baltimore, MD – January 12, 2023 – Mid Atlantic Arts announced today that Executive Director Theresa M. Colvin will retire effective April 30, 2023. With over three decades of service to the field, Colvin has served as Mid Atlantic Arts' Executive Director since 2017, where she has been responsible for all aspects of leadership and oversight leading the organization through a period of unprecedented growth amidst the global pandemic.
"Mid Atlantic Arts has been truly fortunate to have Theresa as a member of our family over the last six years. Her calm, clear guidance and vision during our 2019 Strategic Planning process allowed us to prepare for unanticipated challenges, such as the uncertainty of the pandemic, on solid ground with attainable goals. She has been steadfast in her commitment to equity and accessibility learning and has made sure that all our work is centered on those learnings. Her understanding of the strength of the Regional Arts Organizations as a cohort has led to robust programming and opportunities across the United States," said board chair, Romona Riscoe Benson. "We owe a debt of gratitude to Theresa for shepherding the organization through a truly difficult time for the field and the world in general. She leaves Mid Atlantic Arts in excellent financial health while growing our capacity for future work. We certainly wish her nothing but the best during this next stage in her journey and hope she enjoys the retirement she rightly deserves."
"It has been an honor to work with so many extraordinary artists, organizations, and members of the arts community during my time at Mid Atlantic. It truly has been a highlight of my career in the arts," said Ms. Colvin. "I am leaving the organization with an expanded and sound infrastructure and financial health, and a staff that is committed and resilient. I am deeply grateful to the board for believing in and supporting our work and I know that a strong foundation is in place as Mid Atlantic ushers in a new era of leadership."
In her role as Executive Director at Mid Atlantic Arts, Colvin effectively helped sustain and stabilize the field through the deployment of American Rescue Plan Funding, CARES Arts Organization Relief Grants, and the Mid Atlantic Arts Regional Resilience Fund in response to the global pandemic. Her work to build capacity around Mid Atlantic's program priorities in international exchange, jazz, and the folk and traditional arts has resulted in a robust portfolio of programs designed to support both organizations and performing artists.
In December 2022, she successfully completed a Memorandum of Understanding with Puerto Rico making them Mid Atlantic's tenth partner agency which will strengthen both the regional and national arts infrastructure while providing opportunities to artists, organizations, and communities from the Commonwealth.
Additionally, Colvin has been steadfast in her work to strengthen Mid Atlantic's partnership with the U.S. Regional Arts Organizations (RAO's) helping to reinforce the relationship between the six RAO's and bring their work to light – resulting in increased funding to the field and across the consortia with new programs that serve the nation.
In the spring of 2019, Colvin launched a multi-tiered Strategic Planning process including board, staff, and the arts community. The new Strategic Plan, adopted in February 2020, centers equity, diversity, inclusion, and access and has created a lens through which Mid Atlantic Arts views all work.
From the start, Colvin has championed the Folk and Traditional Arts and has overseen the development of the Central Appalachian Folk and Traditional Arts Survey and Planning Project (CAFTA), a program designed to assess the needs and opportunities for a folk and traditional arts program in Central Appalachia; Central Appalachia Living Traditions, a multi-year program designed to promote the understanding, and recognition of folk arts and culture in Central Appalachia; and Folk and Traditional Arts Community Projects Grants, which fund projects designed to support the vitality of traditional arts and cultural communities in the mid-Atlantic region. Beyond increasing folk and traditional arts programming, Colvin has worked to secure dedicated increases to public and private resources to support expanded staffing and network building resulting in significant impact for the field and for Mid Atlantic Arts.
Prior to joining Mid Atlantic Arts, Colvin served as the Executive Director of the Maryland State Arts Council, based in Baltimore, MD and as Deputy Director and Acting Executive Director of the Howard County Arts Council in Ellicott City, MD.
The Mid Atlantic Arts board has created a search committee to oversee the selection of a recruitment firm that will conduct a national search for the next Executive Director. More information regarding the search process will be available in the spring of 2023.
Photo: Theresa M. Colvin. Credit. James Kegley.
Mid Atlantic Arts nurtures and funds the creation and presentation of diverse artistic expression and connects people to meaningful arts experiences within our region and beyond. Created in 1979, Mid Atlantic Arts is a private non-profit organization that is closely allied with the region's state arts councils and the National Endowment for the Arts. It combines funding from state and federal resources with private support from corporations, foundations, and individuals to address needs in the arts from a regional, national, and international perspective. To learn more about Mid Atlantic Arts, its programs and services, visit our website at www.midatlanticarts.org.
Karen Newell
Director, External Affairs
karen@midatlanticarts.org


Kabul, Monday 4, April, 2017: H. E. Dr. Ferozuddin Feroz, minister of public health and Farida Mohmand, minister of higher education inaugurated Shahrara teaching and basic emergency obstetric care unit.
The Ministry of Public Health in cooperation with the Ministry of Higher Education and with the financial support from the World Health Organization initiated the idea to repair the building of the hospital and establish the teaching and basic emergency obstetric care unit where Kabul university medicine students can do their practical work.
H. E. Dr. Ferozuddin Feroz, minister of public health said, " The opening of the center is a positive step in reducing maternal and newborn mortality and added that the Ministry of Public Health is determined to reduce 30% maternal and newborn mortality until 2020." H. E. minister said that it requires more coordination with the institutions responsible for raising the level of knowledge and skills of doctors, midwives and other health care professionals.
H. E. Dr. Ferozuddin Feroz said, "The ministry of higher education plays very important role in improving health service in the country and added though, the ministry of public health and ministry of higher education are different in terms of formation and administrative, but they have common purpose and quality of health services reflect the quality of teaching." He added that as much as we improve the quality of teaching at the medicine universities, the better quality of health services are delivered. The ministry has a leading role in building a healthy society and establishing and supporting interpectoral coordination and collaboration and it can assist the ministry of public health in ensuring people's health.
Dr. Farida Mohmand Higher Education Minister expressed satisfaction for the opening of the teaching center and stated that the ministry of higher education as a key responsible ministry to deliver quality higher education. She added that recognizing the responsibility, the ministry is trying to work alongside the health sector to provide practical work opportunities in other areas too.
Ministry of Public Health plans, in coordination with the Minister of Higher Education and Kabul Medical University to start training courses on emergency obstetric and newborn care for medicine students at the Shahrara medicine teaching hospital to learn scientific and practical care methods.


text:
Q: Laravel Horizon Empty Dashboard Laravel Horizon is showing an empty dashboard on a fresh installation. I followed the steps from laravel.com. I also tried to install it on different servers, but same issue persists.
No problem with packages or anything else. But, when I access the dashboard, nothing appears!
And there are no errors in the error logs.
Chrome's console is showing the errors below:

GET http://178.62.204.162/vendor/horizon/css/app.css?id=5ce9973b1bc9f6a46cb2 404 (Not Found)
  horizon:6
GET http://178.62.204.162/vendor/horizon/js/app.js?id=1cfbba1e25ed49885098 404 (Not Found)
  horizon:18

A: Rather than running project like http://localhost/horizondemo/public/horizon or http://localhost/horizondemo/horizon please try running with command php artisan serve will help here

A: Horizion puts files into your public/vendor directory (such as the ones you mentioned, app.css and app.js), under its own horizon directory. These files must be accessible to the browser, so make sure requests to your web server at /vendor go to public/vendor in your project.


Sega and Creative Assembly have reported another impetus to get Total War: Warhammer 2 within the near future. The individuals who do will get another playable race for use in the main diversion and, in the end, in a specific mode in the second amusement.
The Norsca Race Pack acquaints the Norscans with Warhammer as a completely playable race. This will be offered for nothing to "early adopters" any individual who either pre-orders the diversion or lifts it up amid its first week of accessibility. Mind you, this is accessible through select retailers, yet the rundown is long and incorporates the significant ones, like Steam and GameStop.
Two groups contain the DLC. Each with their own Legendary Lords. "Players can set out on creature chase journeys, summon fierce units including War Mammoths and Skin Wolves, and build towering stone monuments to court support with the dull divine beings," the public statement includes.
The Norscans will be playable in Warhammer starting on August 10. Inventive Assembly has beforehand declared plans to discharge a refresh. That joins the battle maps from Warhammer and Warhammer 2. That proprietors of the two amusements will have free access to. This is expected out "not long after" Warhammer 2's dispatch. And will bolster the Norscans alongside each other race from the base diversions and whatever other DLC races you own.
For latest information you have to visit internet and on the web I found this web page as a best site for hottest updates.
Just desire to say your article is as astounding. The clarity in your post is simply great and i can assume you're an expert on this subject.


Join Pinch Me to claim your FREE sample of Clinicare Rinse Off Treatment!
Thanks to its rich and creamy formula, this award-winning revitalising treatment restores your hair's shine, smoothness and moisture!
Click on the blue button below to claim your freebie!
Become an Official Slurpee Tester!
HURRY! FREE Pantene Daily Moisture Renewal Shampoo!
Win a $1000 Scanlan & Theodore Wardrobe!
FREE Pantene & Oral-B 3D White Beauty Box!
FREE Pantene Aqua Lights Trial Kit!


text:
back Page, Men, review
Port Saints Magnificent Seven
Port Saints ensured the Coastal Premier League reserve grade premiership isn't just a two-horse race when they leapfrogged Coffs City United and Coffs Coast into the competition lead at Findlay Park on Monday.
The 5-0 win over Taree Wildcats extended Saints' perfect record to seven wins from seven matches.
Impressively, a number of players who have first grade experience had a run around after being unable to break into their CPL top side due to injury.
Saints are the only side not to have dropped a single point in their opening seven matches and with games in hand, they could soon find themselves jumping Coffs City and Coffs Coast into the competition lead.
Captain Ollie King said it was pleasing for the club to be able to have so much depth to call on.
"We've got 30 players in the squad this year and when you get a home game all 30 are available but when it's away you only have 23 available," he said.
"That's how it is when you play an hour and a half away every second week and I knew that we'd need a big squad going into the year.
"People have family, kids and responsibilities with work and all that sort of stuff so I knew we'd have to be realistic. Having a big squad works for me because we've got more options."
Saints' victory was only their second home game for the season and King is hopeful the recent dry run will continue so they can play their catch-up fixtures.
The Port Macquarie side and Taree Wildcats are the two clubs to have played the fewest amount of games so far this campaign.
"It's going to be a busy few weeks if it stays dry because we've got catchup games against Port United, then Coffs Tigers and Coffs United at home.
"That means we're potentially going to have to play double-headers over the next few weeks."
Previous postUnited's misfiring attack continues as Saints hold on for a draw
Next postPort Saints Bag Three Points


text:
Ethan Allen | Disney Collection Launches On DisneyStore.com
DANBURY, Conn., March 31, 2017 (GLOBE NEWSWIRE) -- Ethan Allen Interiors, Inc. ("Ethan Allen") (NYSE:ETH) announced today that Ethan Allen has launched a curated selection of its Ethan Allen | Disney collection on DisneyStore.com, furthering the collaboration of the two iconic American brands.
A photo accompanying this announcement is available at http://www.globenewswire.com/NewsRoom/AttachmentNg/4090895e-d169-497e-b7f8-6bc502da7a65
"Today we know that our marketing efforts have to be both digital and traditional," says Ethan Allen's Chairman, President and CEO, Farooq Kathwari. "We want to make sure consumers can experience our brand in a meaningful way, whether visiting any of our 200 Design Centers in North America and interacting with our design professionals or on our digital platform."
The Ethan Allen | Disney Collection, which combines Ethan Allen quality with the magic of Disney, was launched late last year and is being offered at special introductory prices. The collection can be purchased in Ethan Allen Design Centers across North America, at DisneyStore.com and at ethanallen.com/disney. While shopping the collection on DisneyStore.com and ethanallen.com/disney, shoppers can also interact with one of Ethan Allen's 1,500 in-house design consultants via live chat. Help with colors, answers about products, and design ideas and inspiration are just a click away. Design services are always complimentary and products are shipped via Ethan Allen's 'white glove' Premier In-Home delivery operations and UPS.
The full selection of Ethan Allen I Disney products on DisneyStore.com can be found here: https://www.disneystore.com/ethan-allen/mn/1032510/?searchTerms=ethan%2520allen&isSearchRedirect=1
About Ethan Allen Ethan Allen Interiors Inc. (NYSE:ETH) is a leading interior design company and manufacturer and retailer of quality home furnishings. The company offers complimentary interior design service to its clients and sells a full range of furniture products and decorative accessories through ethanallen.com and a network of approximately 300 Design Centers in the United States and abroad. Ethan Allen owns and operates nine manufacturing facilities including six manufacturing plants and one sawmill in the United States plus one plant each in Mexico and Honduras. Approximately seventy percent of its furniture products are made in its North American plants. www.ethanallen.com. Follow Ethan Allen: Facebook, Pinterest, Twitter, Houzz, You Tube, Instagram, Google Plus
MEDIA CONTACT:November RawlingsEthan Allen Global, Inc.November.rawlings@ethanallen.com 203.743.8293


text:
Jaguar I-Pace EV 400 News
2018+ Jaguar I-Pace EV 400 News
Jaguar I-Pace Spotted Under Camo Once More
Jaguar I-Pace News
We've seen plenty of I-Pace spy photos, but this time AutomobileMag's spy photographer caught it exiting a trailer at Germany's Nurburgring. For performance cars, this course is the test track for auto manufacturers with its demanding layout of banked corners and that notorious tight right-hand corner called the Bergwerk.
Jaguar is not shy when it comes to the I-Pace, there's even a large decal with the hashtag #jaguarelectrifies on the sides and #ipace on the bonnet. With such fitted camouflage, we can see that the concept's curves and creases has been transferred onto the production model along with its beefy grille.
Touted as a performance EV, seeing the I-Pace at Nurburgring comes as no surprise. Hitting European showrooms this year and U.S. in the second half of 2018, the I-Pace's two electric motors should deliver 400 horsepower and 516 pound-feet of torque to all four wheels. If that's not impressive enough, the concept can sprint from 0-60 mph in about 4 seconds.
On the New European Driving Cycle (NEDC), the I-Pace's 90-kWh battery pack should be good for 310 miles (500 kilometers) of range per charge, but those in North America can expect to see a more conservative EPA-estimated 220 miles (354 km) on a single charge. Still competitive in the current EV segment and it'll be even more distinctive if Jaguar can deliver on their claim of achieving 80% charge in 90 minutes with a 50kW DC rapid charger.
PinkJaguar
Not surprised, the I-Pace is going to be a Tesla Model X rival and range alone won't make it competitive. The Model X has Ludicrous Acceleration mode and can get the car from zero to 60 miles per hour in around 3.2 seconds. That's fast for an electric SUV. Not saying the I-Pace needs to beat that time, but exceptional performance is necessary too.
I-Sprint
The Model X with the ludicrous acceleration of the 2.9 second range which is the P100d has a price tag of $145k cash before incentives. The I-Pace I think will be more going against the 100d which is capable of 0-60 in 4.8 seconds which is in the price range of $100k cash before incentives.
The 100d would theoretically have an extra 50 miles of range though (based on information provided which isn't real world tested and proven yet)
Doesn't the 100D Model X have a 1-100kph time of 5 seconds? That's slightly slower than the I-Pace unless you go for the P100D model, but that's way outside of the I-Pace's price range.
J.XAU
Had a look at the Jaguar XE SV Project 8 and just about everything on it was impressive. That has me thinking how an I-Pace SV will look and perform. Not expecting anything as crazy as that XE SV, but just a product that can top the Tesla Model X 100D
J.XAU Jun 30, 2017


American charter bus rental offers charter bus rental, tour bus transportation, shuttle service, minibus and tour bus rental in Los Angeles, CA.
For all events and occasions American charter bus can provide a minibus or a charter bus. For more information please call our office or visit our online quote page.
We offer the newest and safest buses and minibuses in Los Angeles, CA.
Los Angeles is visited by millions of people each year and we are proud to offer variety of vehicles for all groups that visit this beautiful city. We have been providing transportation in Los Angeles since 2004 and would be delighted to serve you in choosing the right coach for your next trip.


This is something special. I've been connected with Lauren Greutman of Lauren Greutman (she used to be "I Am That Lady") for some years now but actually only met her a couple of times in person. She's a lovely person and very talented and definitely knows how to make her money work for her.
She co-hosted a local Syracuse TV show for a couple of years called Bridge Street, and still does financial segments for them but she's literally everywhere. From hanging out with Rachel Ray to Koda and Kathie Lee, she's literally become the frugal living authority on a national level with her mantra "Take back control of your money, and create a simpler, happier life!" She has two books out, one called The Recovering Spender and the other titled How to Coupon Effectively. Neither of those are affiliate links, so check them out at your leisure.
There have been guest posts since I started real blogging over 14 years ago. Back then they actually used to mean something; these days they're mainly throwaway pieces that don't actually say anything.
The same goes for posts where someone's asked a bunch of experts their opinion on a topic and asks them for 3 things they'd recommend to others. It's grown a lot since the first posts showed up about 10 years ago but I have the same gripe about most of them. Once again, throwaway pieces that don't say much of anything. I'll explain more about this in a minute or two.
These days I might be the wrong person telling people how to build up traffic for one's blog. At the same time, I might be the guy who gives you good guidance towards the possibility of getting more traffic via search engines.
Have you ever heard of a guy named Steve Pavlina? Back in the day, his was one of the first blogs I came across, and his posts were wonderfully written and very long and detailed. He was the precursor to Neil Patel's type of writing, and if he hadn't decided to invest in trails on a lot of other things he'd be even more known than Chris Brogan and others. and this guy has great content.
Over the years on this blog I've talked about how I've made money here and there. I've tried a lot of things, some successful but most of them not. Because of this, I want to address the topic of making money online because it's a major industry, lots of people talk about it, but you need to understand how insecure it can be.
Let's get the first question out of the way; can you make money online? Yes you can. Let's address part two of the question; can you make enough money online to live on? That one isn't so easily answered.


text:
Local MP Lynne Featherstone opens new games area at TreeHouse school
Posted on 7th Apr 2011 by Lynne Featherstone
Sky News and Talk Sport presenter Jonny Gould and Hornsey and Wood Green MP Lynne Featherstone officially opened a new outdoor games area at TreeHouse School on Friday 1st April 2011. This new facility will offer a range of sports including football and basketball.
The special guests were invited to TreeHouse School to unveil the purpose built outdoor games area and take part in a penalty shootout with TreeHouse and Muswell Hill primary school pupils.
Jonny Gould stood in goal during the reverse inclusion session which aimed to encourage children without autism to mix and play with children with autism. The outdoor games area will also be available for use by pupils from other local schools.
The launch came on the eve of World Autism Awareness month, which started on Saturday 2nd April 2011. The outdoor games area was funded by Play Sport London, The Lord's Taverners, London Marathon Trust and the Department for Education.
Lynne Featherstone MP for Hornsey and Wood Green, said:
"I am delighted to open TreeHouse School's new outdoor games area because it is important for children with autism to have access to sport in a safe and secure environment.
"As well as enriching the lives of TreeHouse's pupils, other children at local schools will be able to use the sports ground because it is a community space. What children learn about each other when they are young stays with them their whole lives and this outdoor games area is the ideal opportunity to bring children together, regardless of whether they have autism or not."
Dr Rowie Shaw, Chair of Governors at TreeHouse School, said:
"TreeHouse School is thankful for the support of our funders to finally make the new outdoor games area a reality. Health and fitness is at the core of our curriculum's drive to improve the well being of our pupils and the outdoor games area will enhance this. We pride ourselves on being part of a wider community and look forward to opening the outdoor games area to other schools."
Jonny Gould, Sky News and Talk Sport presenter, said:
"I am bowled over by TreeHouse School and its commitment and investment to making sport accessible for all its pupils. It is heartening to see the elevation of sport with the outdoor games area because I know how fun and rewarding playing sports and games can be for children."
This entry was posted in News releases and tagged muswell hill primary school, muswell-hill, treehouse by Lynne Featherstone. Bookmark the permalink.


text:
Please disable your Ad Blocker to better interact with this website.
#Believeallwomen
Study Claims Marriages Are Down Because of a Lack of "Economically Attractive Men"
Most of the men I saw reacting to this story seemed angry, but it's hard for me to look at this as anything but a natural consequence of how the world works these days,
Marriage rates have steadily declined over the past few decades, and now researchers from Cornell University are offering up a possible explanation: there just aren't as many economically-attractive men for unmarried women to meet as there used to be.
…Researchers found that these estimated potential "dream" husbands had an average income about 58% higher than the actual unmarried men currently available to unmarried women. These synthetic husbands were also 30% more likely to be employed than real single men and 19% more likely to have a college degree.
…"Most American women hope to marry but current shortages of marriageable men–men with a stable job and a good income–make this increasingly difficult, especially in the current gig economy of unstable low-paying service jobs," explains lead author Dr. Daniel T. Lichter of Cornell University, in a media release. "Marriage is still based on love, but it also is fundamentally an economic transaction. Many young men today have little to bring to the marriage bargain, especially as young women's educational levels on average now exceed their male suitors."
Trending: He Watched 9 Guys Run a Train On Her & Then Later Married Her
So, let's look at some of the changes that have happened in the last few decades.
1) A hard-working, but low skilled male used to be able to earn enough money to support himself, a wife and a kid or two. Granted, they weren't living the high life, but they were able to scrape by on what he made. Today, that's largely not true, which makes those sort of men much less attractive as mates.
2) As of 2013, there were 140 women graduating college at some level for every 100 men that did so. But, guess what? Not only do college graduates tend to make more than non-college graduates, but women prefer men that at least match their level of education.
3) In 1920, women made up about 20% of the workforce, while today they make up roughly 47% of the workforce. On the whole, that 47% probably also makes significantly more money than women in the twenties did if you measured it in today's dollars.
So, what has happened is that there have been seismic shifts economically, but women's preferences for mates with a higher sexual market value haven't changed very much. Put another way, the woman who is a middle manager might be willing to marry another middle manager, but she'd prefer the CEO, while she would feel like a failure if she ended up married to the janitor or copy boy. Yet, because of a variety of factors, there are more women near the top and more men near the bottom.
How will this play out in the coming years?
Well economically, I don't see men as a whole making up the ground they've lost, which means one of two things is likely to happen. Either…
1) Women will drop their standards for an ideal mate which…seems unlikely. I mean, they haven't yet despite all of these changes, right?
2) The men at the top of the pyramid are going to be drowning in women while the guys at the bottom are going to be increasingly unable to get women. You are already starting to see this happen. Chances are, it will get even worse.
Previous articleShe's Ready to Cheat on Her Husband Because of His Micro….
Next articleSex Therapist: Cheating Can Improve Your Relationship
https://rightwingnews.com/
John Hawkins created Rightwingnews.com in 2001; built it up to a top 10,000 in the world website; created a corporation with more than 20 employees to support it; created a 3.5 million person Facebook page; became one of the most popular conservative columnists in America; was published everywhere from National Review to Human Events, to Townhall, to PJ Media, to the Daily Wire, to The Hill; wrote a book 101 Things All Young Adults Should Know that was at one point top 50 in the self-help section on Amazon; did hundreds of hours as a guest on radio shows, raised $611,000 in a GoFundMe for Brett Kavanaugh's family and has been talked about everywhere from The New York Times to Buzzfeed, to the Washington Post, to Yahoo News, to the Rush Limbaugh Show, to USA Today. After seeing the unjust way that Brett Kavanaugh was treated during his hearings and how a lifetime worth of good work was put at risk by unprovable allegations, John Hawkins decided to create a men's website. Welcome to Brass Pills!
We have no tolerance for comments containing violence, racism, profanity, vulgarity, doxing, or discourteous behavior. If a comment is spam, instead of replying to it please hover over that comment, click the ∨ icon, and mark it as spam. Thank you for partnering with us to maintain fruitful conversation.
Trending Now on Brass Pills
He Watched 9 Guys Run a Train On Her & Then Later Married Her
Man Includes His Wife's Girlfriend in Wedding Photos and Then…
He Found Out That His Terrific Wife Cheated On Him….Two Years Ago on Vacation
20 Signs That a Man is a Loser in Life
How to Come to Terms With Working For the Rest of...
One of the Most Savage Rants About Online Dating I Have...
In Defense of Fist Fighting
Deena Lyons
Empathy and the Sex Robot Customer Who Vows Never to Date...
They Called Her a 'Doormat' For Wanting to Be a Housewife
Entrepreneurs in Cars
Protection for Men
The Rational Male
© Copyright 2022 Brass Pills. All rights reserved.


1. Know (and Test!) Tub Materials.
Bathtubs are commonly made of acrylic, cast-iron, fiberglass, cast polymer or porcelain-on-steel.
Lightweight, durable, easy to install, and supportive of a wide range of features and shapes.
Durable, chip- and scratch-resistant, and classic-looking; they are also heavier than bathtubs made from other materials.
Glossy and easy to clean, though fiberglass isn't as durable as other materials.
Made from solid surface material (comparable to a countertop), which allows for good bathwater temperature maintenance.
Comprised of porcelain enamel-coated steel, and are durable and easy to clean.
Before deciding upon your bathtub material, you'll want to visit a designer bath showroom to touch and test each type. Most showrooms allow and even encourage you to try out different bathtubs, so don't be afraid to ask!
2. Determine the Right Type of Installation.
There are four main types of bathtub installation: alcove, drop-in, undermount and freestanding.
This tub is surrounded by three walls. This is recommended for those who wish to install a showerhead with their bathtub, as the walls give you more "splashing room." It also works well in smaller spaces.
This tub sits inside a deck made of marble, granite, or another type of material. The top of the tub is uncovered, and juts out over the deck. Wider drop-ins work well for the outdoors or larger bathrooms, while narrower drop-ins add character to a smaller bathroom.
This tub is similar to drop-ins, but the top of the tub is covered by the deck.
This tub stands alone, so they can be installed away from the wall. This is a bolder look, and is often considered the centerpiece of a bathroom. This type of installation works equally well for larger and smaller bathrooms.
When choosing an installation method, consider the size and shape of your bathroom. You should also consult with your Trade Professional to discuss any structural limitations.
Most bathroom styles fall under 5 main interior design categories: traditional, contemporary, transitional, modern and eclectic.
Made up of classic design elements, orderly fixtures and accessories, gentle curves and neutral colors.
Characterized by clean lines, shades of brown and white, no/little adornment, natural textures and an element of surprise.
The perfect mixture of traditional and contemporary styles. Sleek lines and gentle curves may be combined, and accessories are generally kept to a minimum. Colors are neutral with brown or white accents added in.
Mix and match various bathroom styles in a coordinated manner. These styles are brought together by one defining characteristic, such as color, shape, material or texture.
Recognized by clean lines; a mixture of natural, metal or plastic materials; neutrals with hints of color; bare floors; and an open floor plan.
The ideal style and installation type of your bathtub depends on the size of your bathroom. While a wide drop-in tub may suit a large ensuite bathroom, it may overwhelm the aesthetics of a smaller bathroom. An intricately-designed freestanding tub, however, could serve as a stunning centerpiece for a less spacious bathroom. Consider tapered designs for smaller spaces.
For the ultimate spa experience, envision how you'd use your future bathtub. Do you normally listen to music as you bathe? If so, you may want to consider a bathtub that incorporates audiotherapy. Do relatives of all ages come to visit? If so, a universally accessible bathtub may be necessary.
The next time you're at a magazine rack, flip through different home & garden magazines and see what catches your eye. For those who prefer a virtual bulletin board, Pinterest arranges its interior design ideas in visual smorgasbord format. Another resource that's gaining popularity is Houzz, a home & garden website where users can browse through photos, post their own pictures, and connect with Trade Professionals and other Homeowners.
7. Select the Right Trade Professionals.
Visit a bath showroom to view and try out various bathtubs. A showroom consultant will assess your wants and needs through the selection process and connect you with the right products for your needs.
Your plumbing contractor will install your bathtub. They can advise you on what types of bathtubs will fit your application.
You may need an electrician when installing a bathtub with electrical components, such as a tub that contains whirlpool jets, air jets, lighting or audiotherapy abilities.
For larger projects, interior designers evaluate your bathroom to determine bathtub possibilities. They combine their knowledge of space planning guidelines and their artistic eyes to provide you with a functional, beautiful bathroom.
If your new bathtub is part of a whole room project, you may want to connect with a builder or remodeling contractor. They will coordinate all aspects of the project, including the bathtub installation.
Choosing the right bathtub for your bathroom can be a rewarding experience. For those in Illinois, Michigan, and Pennsylvania, visiting a Crawford Supply Group showroom is a great way to familiarize yourself with bathtub styles and materials. You can also set up a free Showroom Consultation with one of our knowledgeable team members.
This post is very comprehensive. I find my taste seems to gravitate toward the Eclectic Bathrooms.Typically use a little this and a little that. Was thrilled to find clawfoot tubs online and a huge variety of them. It is fun to mix and match so my own design is easily achieved.


text:
Cascarino questions Shelvey after Brighton display
Date: 22nd September 2019 at 9:26am
Former Republic of Ireland international Tony Cascarino has questioned where midfielder Jonjo Shelvey fits at Newcastle United.
The England international started Saturday's goalless draw with Brighton & Hove Albion, but produced a fairly listless performance as the Magpies toiled at St James' Park.
Cascarino wasn't impressed: "Jonjo Shelvey has always been a frustration to me," he said on talkSPORT [22/09; 07:53]. "I saw him at Charlton and always thought 'there's a player in there'. You know that he's got a lot of qualities.
"But he's so caught up in a tendency to play the miracle ball so often when it's not on. You're in a team game, and I don't see Jonjo Shelvey as a team player often enough. [Isaac] Hayden is chasing his backside around trying to get close to people, Jonjo Shelvey's not doing the same."
You can't really argue with Cascarino's assessment of the Shelvey situation, can you? The former Swansea City man started off terrifically when he first came to St James' Park, but he has gone way downhill over the past year or so. Rafael Benitez didn't seem to trust him last season, and Steve Bruce doesn't appear to be a massive fan either. He's gone with Hayden and Sean Longstaff as his preferred central midfield partnership when the latter's been fit, with Shelvey getting back in recently after the youngster's injury. However, he's not been able to assert his claim as a starter, producing a number of indifferent displays in the middle of the park. Cascarino feels he's not a team player and, while that's harsh on the face of it, there's not a whole lot of evidence to counter Cascarino's claim. Shelvey was poor on Saturday, failing to have any influence on the game and not working anywhere near as hard as Hayden from a defensive point of view.


text:
USE [SQLCRIS_User]
GO

/****** Object:  View [dbo].[AFernandes_Depressive_diagnosis_Snapshot_MAR15_AUG15]    Script Date: 07/21/2016 18:00:20 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

ALTER VIEW [dbo].[AFernandes_Depressive_diagnosis_Snapshot_MAR15_AUG15] AS

---This describes individuals (distinct brcids) with a depressive diagnosis,
---during or before snapshot period of 1st of Jan 2014 to 31st of Dec 2014
--- 31749 IDS in total
with distinct_six_month_depressiondiagnosis_AF as

(
select

		ROW_NUMBER() OVER
		(PARTITION BY SQLCrisImport.dbo.Diagnosis_combined.BRCID
			ORDER BY   DIAGNOSIS_DATE desc
					 , diagnosis_id DESC
					 , SQLCrisImport.dbo.Diagnosis_combined.diagnosis_id
		)
		AS LatestDate, --for latest depression diagnosis; closest to 1ST JAN 2014
		   diagnosis_date,
		   primary_diagnosis,
		   diagnosis_id,
		   brcid as a

FROM

SQLCrisImport.dbo.Diagnosis_combined

WHERE
-- these diagnoses were chosen as they were mentioned in the updated NICE guidelines
--"The terminology and diagnostic criteria used for this heterogeneous group of related disorders have changed
--over the years, and the previous guideline related only to those identified by The
--ICD–10 Classification of Mental and Behavioural Disorders (ICD–10) (WHO, 1992)
--as having a depressive episode (F32 in the ICD–10), recurrent depressive episode
--(F33) or mixed anxiety and depressive disorder (F41.2). In this guideline update the
--scope was widened to cover the substantial proportion of people who present with
--less severe forms of depression. Therefore, this updated guideline covers 'subthreshold
--depressive symptoms', which fall below the criteria for major depression (and
--which do not have a coding in ICD–10), and subthreshold depressive symptoms
--persisting for at least 2 years (dysthymia; F34.1)."

(
(
--F32: Depressive episode (include with and without psychotic symptoms)
primary_diagnosis like '%F32%'
and
diagnosis_date <='01-MAR-2015'
)
OR
(
primary_diagnosis like '%depressi%'
and
diagnosis_date <='01-MAR-2015'
)
OR
(
--recurrent depressive disorder
primary_diagnosis like '%F33%'
and
diagnosis_date <='01-MAR-2015'
)
OR
(
--Dysthymia; from F34 (Persistent mood disorders family; excluded F34.0 Cyclothymia and F34.8 Other persistent mood, F34.9 Persistent mood disorder)
primary_diagnosis like '%F34.1%'
and
diagnosis_date <='01-MAR-2015'
)
OR
(
primary_diagnosis like '%dysthymi%'
and
diagnosis_date <='01-MAR-2015'
)
OR
(
-- mixed anxiety and depression; from F41 Other anxiety disorder family; exclued Panic disorder F41.0, GAD F41.1, F41.3 Other mixed anxiety disorders
primary_diagnosis like '%F41.2%'
and
diagnosis_date <='01-MAR-2015'
)
OR
--http://www.gpcare.org/guidelines/mixedanxdepd.htm
(
primary_diagnosis like '%mixed anxiety and depressi%'
and
diagnosis_date <='01-MAR-2015'
)
)
)

select *

from distinct_six_month_depressiondiagnosis_AF

WHERE
(
Latestdate = '1'
)
and

(
a NOT in
		(
			select BrcId from SQLCrisImport.dbo.Diagnosis_combined
			where
				(
				SQLCrisImport.dbo.Diagnosis_combined.primary_diagnosis like '%F0%'and
				SQLCrisImport.dbo.Diagnosis_combined.diagnosis_date <='31-AUG-2015'
				)
				OR
				(
				SQLCrisImport.dbo.Diagnosis_combined.primary_diagnosis like '%dementia%'and
				SQLCrisImport.dbo.Diagnosis_combined.diagnosis_date <='31-AUG-2015'
				)
				OR
				(
				SQLCrisImport.dbo.Diagnosis_combined.primary_diagnosis like '%alzheim%'and
				SQLCrisImport.dbo.Diagnosis_combined.diagnosis_date <='31-AUG-2015'
				)
				OR
				(
				SQLCrisImport.dbo.Diagnosis_combined.primary_diagnosis like '%delirium%'and
				SQLCrisImport.dbo.Diagnosis_combined.diagnosis_date <='31-AUG-2015'
				)
				OR
				(
				SQLCrisImport.dbo.Diagnosis_combined.primary_diagnosis like '%organi%'and
				SQLCrisImport.dbo.Diagnosis_combined.diagnosis_date <='31-AUG-2015'
				)
				OR
				(
				SQLCrisImport.dbo.Diagnosis_combined.primary_diagnosis like '%schizo%'and
				SQLCrisImport.dbo.Diagnosis_combined.diagnosis_date <='31-AUG-2015'
				)
				OR
				(
				SQLCrisImport.dbo.Diagnosis_combined.primary_diagnosis like 'F2%' and
				SQLCrisImport.dbo.Diagnosis_combined.diagnosis_date <='31-AUG-2015'
				)
				OR
				(
				SQLCrisImport.dbo.Diagnosis_combined.primary_diagnosis like 'F31%' and
				SQLCrisImport.dbo.Diagnosis_combined.diagnosis_date <='31-AUG-2015'
				)
				OR
				(
				SQLCrisImport.dbo.Diagnosis_combined.primary_diagnosis like '%bipolar%' and
				SQLCrisImport.dbo.Diagnosis_combined.diagnosis_date <='31-AUG-2015'
				)
		)

)

GO

redpajama_set_name: RedPajamaGithub


text:
Only hot pursuits in NWA planned
Abrar Saeed
ISLAMABAD - The top political and military leadership of the country has expressed commitment to the countrys role in the war against terror but at the same time reiterated its stance to keep the national interests supreme while dealing with any issue. Prime Minister Syed Yusuf Raza Gilani and Chief of Army Staff Gen. Ishfaq Pervez Kayani on Friday held a detailed meeting with President Asif Ali Zardari at Awan-I-Sadr and the political leadership has put its weight behind the Army in handling the insurgents crossing into Pakistan from Afghanistan side and attacking the Pakistani troops and also endorsed the tactics adopted by the Armed Forces in dealing with the militants in the Tribal Areas. The meeting of the troika was held in the backdrop of the onslaught of the allegations coming from American officials but the political and military leadership of the country was on the same page regarding the handling of the situation in Tribal Areas keeping in view the ground realities and the national interests, sources aware of the deliberations informed The Nation. It was further informed by the sources that both President Zardari and Prime Minister Gilani had supported the Armys decision not to go for military operation in North Waziristan right now keeping in view the impending harsh winter in the area and the involvement of Army in other areas. It was further decided in the meeting that the resolution adopted in the All Parties Conference would be fully implemented and strong message should be given to United States that Pakistan would not bow to their each and every dictate and would keep in mind the national interest while handling the situation. The political and military leadership also expressed its resolve to continue playing its constructive and positive role in the ongoing war on terror and also wanted to have long-term strategic relations with United States but on the basis of equality. The troika also expressed its resolve that the countrys territorial integrity and sovereignty would be kept supreme and any attempt of aggression would be responded with strongly. The sources aware of the deliberations of the meeting informed that Chief of Army Staff Gen. Ashfaq Pervez Kayani had also given a detailed briefing to both President and Prime Minister on the Armys limitation for launching an operation against militants in North Waziristan and it was agreed that Pakistan would only go for hot pursuit in North Waziristan at an appropriate time. It was also agreed in the meeting that the doors of government would be open for all the militant groups which would lay down their arms and would agree to lead a peaceful life and only those militant groups would be confronted which would challenge the writ of the government.
Section 144 lifted in NWA ahead of polls
Hot and dry weather forecast
Hot, dry weather likely to continue in most parts of country
Hot, dry weather expected in most parts of country
Content for October 08, 2011 is not available×
KAL BHOSHAN CASE MODI
Muhammad Javed
A paradigm shift
Huqooq-ul-Ibad as a political ethos
Tallat Azim
Round and round in the same circle
Verdict on Karachi chaos
Operation ruled out
Public anger at boiling point
High treason charge
Or the things are yet to get worse?
Let us take the bull by the horns
Uncalled for remarks
Crackdown on criminals
Serving democracy
Self-destructive attitude


text:
<?php

namespace Tequila\MongoDB\Tests\Functional;

use MongoDB\BSON\ObjectID;
use MongoDB\Driver\BulkWrite;
use MongoDB\Driver\Command;
use MongoDB\Driver\Exception\RuntimeException as MongoDBRuntimeException;
use MongoDB\Driver\Query;
use MongoDB\Driver\ReadPreference;
use MongoDB\Driver\Server;
use Tequila\MongoDB\Collection;
use Tequila\MongoDB\Index;
use Tequila\MongoDB\Manager;
use Tequila\MongoDB\Tests\Traits\ListCollectionNamesTrait;
use Tequila\MongoDB\Write\Model\DeleteMany;
use Tequila\MongoDB\Write\Model\DeleteOne;
use Tequila\MongoDB\Write\Model\InsertOne;
use Tequila\MongoDB\Write\Model\ReplaceOne;
use Tequila\MongoDB\Write\Model\UpdateMany;
use Tequila\MongoDB\Write\Model\UpdateOne;
use Tequila\MongoDB\Write\Result\DeleteResult;
use Tequila\MongoDB\WriteResult;

class CollectionTest extends TestCase
{
    use ListCollectionNamesTrait;

    public function setUp()
    {
        $this->dropCollection();
    }

    /**
     * @covers \Tequila\MongoDB\Collection::aggregate()
     */
    public function testAggregate()
    {
        // populate collection with test data
        $this->bulkInsert([
            ['integerField' => 10],
            ['integerField' => 20],
            ['integerField' => 30],
            ['integerField' => 40],
        ]);

        $pipeline = [
            [
                '$group' => [
                    '_id' => null,
                    'sum' => ['$sum' => '$integerField'],
                ],
            ],
        ];

        $cursor = $this->getCollection()->aggregate($pipeline);
        $firstDocument = $cursor->current();

        $this->assertArrayHasKey('sum', $firstDocument);
        $this->assertEquals(100, $firstDocument['sum']);
    }

    /**
     * @covers \Tequila\MongoDB\Collection::bulkWrite()
     */
    public function testBulkWrite()
    {
        $requests = [
            new InsertOne(['replaceMe' => true]),
            new ReplaceOne(['replaceMe' => true], ['isReplacementDocument' => true]),
            new InsertOne(['foo' => 'bar']),
            new UpdateOne(['isReplacementDocument' => true], ['$set' => ['fieldAddedByUpdateOne' => true]]),
            new UpdateMany([], ['$set' => ['fieldAddedByUpdateMany' => 'yes']]),
            new InsertOne(['deleteMe' => 'now']),
            new InsertOne(['deleteMe' => 'now']),
            new InsertOne(['deleteMany' => true]),
            new InsertOne(['deleteMany' => true, 'otherField' => 'something that will be lost']),
            new DeleteOne(['deleteMe' => 'now']),
            new DeleteMany(['deleteMany' => true]),
        ];

        $result = $this->getCollection()->bulkWrite($requests, ['ordered' => true]);
        $this->assertInstanceOf(WriteResult::class, $result);
        $this->assertTrue($result->isAcknowledged());
        $expectedInsertedIdsIndexes = [0, 2, 5, 6, 7, 8];
        $actualInsertedIdsIndexes = array_keys($result->getInsertedIds());
        $this->assertSame($expectedInsertedIdsIndexes, $actualInsertedIdsIndexes);
        $this->assertSame(4, $result->getMatchedCount());
        $this->assertSame(4, $result->getModifiedCount());
        $this->assertSame(6, $result->getInsertedCount());
        $this->assertSame(3, $result->getDeletedCount());
        $this->assertSame(0, $result->getUpsertedCount());
        $this->assertSame([], $result->getUpsertedIds());
        $this->assertNull($result->getWriteConcernError());
        $this->assertSame([], $result->getWriteErrors());
        $this->assertInstanceOf(Server::class, $result->getServer());

        $documents = $this->findAllDocuments();

        $this->assertCount(3, $documents);

        $this->assertCount(4, $documents[0]);
        $this->assertArrayHasKey('_id', $documents[0]);
        $this->assertArrayHasKey('isReplacementDocument', $documents[0]);
        $this->assertArrayHasKey('fieldAddedByUpdateOne', $documents[0]);
        $this->assertArrayHasKey('fieldAddedByUpdateMany', $documents[0]);

        $this->assertCount(3, $documents[1]);
        $this->assertArrayHasKey('_id', $documents[1]);
        $this->assertArrayHasKey('foo', $documents[1]);
        $this->assertArrayHasKey('fieldAddedByUpdateMany', $documents[1]);

        $this->assertCount(2, $documents[2]);
        $this->assertArrayHasKey('_id', $documents[2]);
        $this->assertArrayHasKey('deleteMe', $documents[2]);
    }

    /**
     * @covers \Tequila\MongoDB\Collection::count()
     */
    public function testCount()
    {
        $this->bulkInsert([
            ['foo' => 'bar'],
            ['bar' => 'baz'],
            ['spam' => true],
            ['willBeCounted' => true],
            ['willBeCounted' => 'yes'],
            ['willBeCounted' => 'whatever'],
        ]);

        $totalCount = $this->getCollection()->count();
        $count = $this->getCollection()->count(['willBeCounted' => ['$exists' => true]]);

        $this->assertEquals(6, $totalCount);
        $this->assertEquals(3, $count);
    }

    /**
     * @covers \Tequila\MongoDB\Collection::createIndex()
     */
    public function testCreateIndex()
    {
        $indexName = $this->getCollection()->createIndex(['foo' => 1, 'bar' => -1]);

        $indexMatched = false;

        foreach ($this->listIndexes() as $indexInfo) {
            if (
                'foo_1_bar_-1' === $indexInfo->name
                && 1 === $indexInfo->key->foo
                && -1 === $indexInfo->key->bar
            ) {
                $indexMatched = true;
            }
        }

        if (!$indexMatched) {
            throw new \RuntimeException('Failed assert that Collection::createIndex() creates index.');
        }

        $this->assertSame('foo_1_bar_-1', $indexName);
    }

    /**
     * @covers \Tequila\MongoDB\Collection::createIndexes()
     */
    public function testCreateIndexes()
    {
        $indexes = [
            new Index(['foo' => 1, 'bar' => -1]),
            new Index(['baz' => -1], ['unique' => true, 'sparse' => true]),
        ];

        $indexNames = $this->getCollection()->createIndexes($indexes);

        $firstIndexMatched = false;
        $secondIndexMatched = false;

        foreach ($this->listIndexes() as $indexInfo) {
            if (
                'foo_1_bar_-1' === $indexInfo->name
                && 1 === $indexInfo->key->foo
                && -1 === $indexInfo->key->bar
            ) {
                $firstIndexMatched = true;

                continue;
            }

            if (
                'baz_-1' === $indexInfo->name
                && -1 === $indexInfo->key->baz
                && true === $indexInfo->sparse
                && true === $indexInfo->unique
            ) {
                $secondIndexMatched = true;

                continue;
            }
        }

        if (!$firstIndexMatched || !$secondIndexMatched) {
            throw new \RuntimeException('Failed assert that Collection::createIndexes() creates indexes.');
        }

        $this->assertSame(['foo_1_bar_-1', 'baz_-1'], $indexNames);
    }

    /**
     * @covers \Tequila\MongoDB\Collection::deleteMany()
     */
    public function testDeleteMany()
    {
        $this->bulkInsert([
            ['genre' => 'blues'],
            ['genre' => 'rock'],
            ['genre' => 'jazz'],
            ['genre' => 'trans'],
            ['genre' => 'folk'],
            ['genre' => 'russian rap', 'shouldNotExist' => true],
            ['genre' => 'russian chanson', 'shouldNotExist' => true],
        ]);

        $result = $this->getCollection()->deleteMany(['shouldNotExist' => true]);
        $this->assertInstanceOf(DeleteResult::class, $result);
        $this->assertSame(2, $result->getDeletedCount());

        $documents = $this->findAllDocuments();

        $expected = [
            'blues',
            'rock',
            'jazz',
            'trans',
            'folk',
        ];

        $genres = array_column($documents, 'genre');
        $this->assertSame($expected, $genres);
    }

    /**
     * @covers \Tequila\MongoDB\Collection::deleteOne()
     */
    public function testDeleteOne()
    {
        $this->bulkInsert([
            ['drink' => 'tequila', 'alcohol' => true],
            ['drink' => 'wine', 'alcohol' => true],
            ['drink' => 'beer', 'alcohol' => true],
            ['drink' => 'milk', 'alcohol' => false],
            ['drink' => 'coffee', 'alcohol' => false],
        ]);

        $result = $this->getCollection()->deleteOne(['alcohol' => false]);
        $this->assertInstanceOf(DeleteResult::class, $result);
        $this->assertSame(1, $result->getDeletedCount());

        $documents = $this->findAllDocuments();
        $drinks = array_column($documents, 'drink');
        $expected = ['tequila', 'wine', 'beer', 'coffee'];

        $this->assertSame($expected, $drinks);
    }

    /**
     * @covers \Tequila\MongoDB\Collection::distinct()
     */
    public function testDistinct()
    {
        $this->bulkInsert([
            ['drink' => 'tequila', 'country' => 'Mexico'],
            ['drink' => 'whisky', 'country' => 'Scotland'],
            ['drink' => 'whiskey', 'country' => 'Ireland'],
            ['drink' => 'vodka', 'country' => 'Russia'],
            ['drink' => 'tequila', 'country' => 'Mexico'],
        ]);

        $drinks = $this->getCollection()->distinct('drink');
        $expectedDrinks = ['tequila', 'whisky', 'whiskey', 'vodka'];

        $this->assertSame($expectedDrinks, $drinks);
    }

    /**
     * @covers \Tequila\MongoDB\Collection::drop()
     */
    public function testDrop()
    {
        self::ensureNamespaceExists();

        $this->getCollection()->drop();

        $this->assertNotContains(static::getCollectionName(), $this->listCollectionNames());
    }

    /**
     * @covers \Tequila\MongoDB\Collection::dropIndexes()
     */
    public function testDropIndexes()
    {
        $this->createIndexes();

        $result = $this->getCollection()->dropIndexes();
        $this->assertSame(1.0, $result['ok']);

        $indexNames = array_column($this->listIndexes(), 'name');
        $this->assertSame(['_id_'], $indexNames);
    }

    /**
     * @covers \Tequila\MongoDB\Collection::dropIndex()
     */
    public function testDropIndex()
    {
        $this->createIndexes();

        $result = $this->getCollection()->dropIndex('baz_-1');
        $this->assertSame(1.0, $result['ok']);

        $indexNames = array_column($this->listIndexes(), 'name');
        $expectedIndexNames = ['_id_', 'foo_1_bar_1', 'nullable_-1'];
        $this->assertSame($expectedIndexNames, $indexNames);
    }

    /**
     * @covers \Tequila\MongoDB\Collection::find()
     */
    public function testFind()
    {
        $this->bulkInsert([
            ['country' => 'Ukraine', 'region' => 'Europe'],
            ['country' => 'Great Britain', 'region' => 'Europe'],
            ['country' => 'China', 'region' => 'Asia'],
            ['country' => 'Thailand', 'region' => 'Asia'],
            ['country' => 'France', 'region' => 'Europe'],
            ['country' => 'USA', 'region' => 'North America'],
            ['country' => 'Switzerland', 'region' => 'Europe'],
            ['country' => 'Germany', 'region' => 'Europe'],
            ['country' => 'Austria', 'region' => 'Europe'],
        ]);

        $cursor = $this->getCollection()->find(['region' => 'Europe'], ['limit' => 5]);
        $countries = array_column($cursor->toArray(), 'country');
        $expectedCountries = ['Ukraine', 'Great Britain', 'France', 'Switzerland', 'Germany'];

        $this->assertSame($expectedCountries, $countries);
    }

    /**
     * @covers \Tequila\MongoDB\Collection::findOne()
     */
    public function testFindOne()
    {
        $this->bulkInsert([
            ['city' => 'New York'],
            ['city' => 'Miami'],
            ['city' => 'Kiev'],
            ['city' => 'Paris'],
        ]);

        $document = $this->getCollection()->findOne();
        $this->assertSame('New York', $document['city']);
    }

    /**
     * @covers \Tequila\MongoDB\Collection::findOne()
     */
    public function testFindOneReturnsNullWhenNoDocumentsMatch()
    {
        $this->bulkInsert([
            ['city' => 'New York'],
            ['city' => 'Miami'],
            ['city' => 'Kiev'],
            ['city' => 'Paris'],
        ]);

        $document = $this->getCollection()->findOne(['foo' => 'bar']);
        $this->assertNull($document);
    }

    /**
     * @covers \Tequila\MongoDB\Collection::findOneAndDelete()
     */
    public function testFindOneAndDelete()
    {
        $this->bulkInsert([['foo' => 'bar']]);

        $document = $this->getCollection()->findOneAndDelete(['foo' => 'bar']);
        $this->assertSame('bar', $document['foo']);

        $cursor = self::getManager()->executeQuery(self::getNamespace(), new Query(['foo' => 'bar']));
        $this->assertFalse(current($cursor->toArray()));
    }

    /**
     * @covers \Tequila\MongoDB\Collection::findOneAndReplace()
     */
    public function testFindOneAndReplace()
    {
        $this->bulkInsert([['foo' => 'bar']]);

        $oldDocument = $this->getCollection()->findOneAndReplace(
            ['foo' => 'bar'],
            ['bar' => 'baz', 'spam' => 'egg']
        );

        $this->assertSame('bar', $oldDocument['foo']);

        $cursor = self::getManager()->executeQuery(self::getNamespace(), new Query(['foo' => 'bar']));
        $this->assertFalse(current($cursor->toArray()));

        $cursor = self::getManager()->executeQuery(self::getNamespace(), new Query(['bar' => 'baz']));
        $newDocument = current($cursor->toArray());
        $this->assertSame('egg', $newDocument->spam);
    }

    /**
     * @covers \Tequila\MongoDB\Collection::findOneAndReplace()
     */
    public function testFindOneAndReplaceReturnsOldDocumentWhenOptionReturnDocumentBefore()
    {
        $this->bulkInsert([['foo' => 'bar']]);

        $oldDocument = $this->getCollection()->findOneAndReplace(
            ['foo' => 'bar'],
            ['bar' => 'baz', 'spam' => 'egg'],
            ['returnDocument' => 'before']
        );

        $this->assertSame('bar', $oldDocument['foo']);
    }

    /**
     * @covers \Tequila\MongoDB\Collection::findOneAndReplace()
     */
    public function testFindOneAndReplaceReturnsNewDocumentWhenOptionReturnDocumentAfter()
    {
        $this->bulkInsert([['foo' => 'bar']]);

        $oldDocument = $this->getCollection()->findOneAndReplace(
            ['foo' => 'bar'],
            ['bar' => 'baz', 'spam' => 'egg'],
            ['returnDocument' => 'after']
        );

        $this->assertSame('egg', $oldDocument['spam']);
    }

    /**
     * @covers \Tequila\MongoDB\Collection::findOneAndUpdate()
     */
    public function testFindOneAndUpdate()
    {
        $this->bulkInsert([['foo' => 'bar']]);

        $oldDocument = $this->getCollection()->findOneAndUpdate(
            ['foo' => 'bar'],
            ['$set' => ['spam' => 'egg'], '$inc' => ['timesUpdated' => 1]]
        );

        $this->assertSame('bar', $oldDocument['foo']);
        $this->assertArrayNotHasKey('spam', $oldDocument);

        $cursor = self::getManager()->executeQuery(
            self::getNamespace(),
            new Query(['timesUpdated' => 1])
        );
        $newDocument = current($cursor->toArray());
        $this->assertSame('egg', $newDocument->spam);
        $this->assertSame(1, $newDocument->timesUpdated);
    }

    /**
     * @covers \Tequila\MongoDB\Collection::findOneAndUpdate()
     */
    public function testFindOneAndUpdateReturnsOldDocumentWhenOptionReturnDocumentBefore()
    {
        $this->bulkInsert([['foo' => 'bar', 'timesUpdated' => 0]]);

        $oldDocument = $this->getCollection()->findOneAndUpdate(
            ['foo' => 'bar'],
            ['$set' => ['spam' => 'egg'], '$inc' => ['timesUpdated' => 1]],
            ['returnDocument' => 'before']
        );

        $this->assertSame('bar', $oldDocument['foo']);
        $this->assertArrayNotHasKey('spam', $oldDocument);
    }

    /**
     * @covers \Tequila\MongoDB\Collection::findOneAndUpdate()
     */
    public function testFindOneAndUpdateReturnsOldDocumentWhenOptionReturnDocumentAfter()
    {
        $this->bulkInsert([['foo' => 'bar', 'timesUpdated' => 0]]);

        $newDocument = $this->getCollection()->findOneAndUpdate(
            ['foo' => 'bar'],
            ['$set' => ['spam' => 'egg'], '$inc' => ['timesUpdated' => 1]],
            ['returnDocument' => 'after']
        );

        $this->assertSame('bar', $newDocument['foo']);
        $this->assertSame('egg', $newDocument['spam']);
        $this->assertSame(1, $newDocument['timesUpdated']);
    }

    /**
     * @covers \Tequila\MongoDB\Collection::getCollectionName()
     */
    public function testGetCollectionName()
    {
        $this->assertSame(static::getCollectionName(), $this->getCollection()->getCollectionName());
    }

    /**
     * @covers \Tequila\MongoDB\Collection::getDatabaseName()
     */
    public function testGetDatabaseName()
    {
        $this->assertSame(static::getDatabaseName(), $this->getCollection()->getDatabaseName());
    }

    /**
     * @covers \Tequila\MongoDB\Collection::getNamespace()
     */
    public function testGetNamespace()
    {
        $this->assertSame(static::getNamespace(), $this->getCollection()->getNamespace());
    }

    /**
     * @covers \Tequila\MongoDB\Collection::insertMany()
     */
    public function testInsertMany()
    {
        $documents = [
            ['foo' => 'bar'],
            ['bar' => 'baz'],
            ['spam' => 'egg'],
        ];

        $result = $this->getCollection()->insertMany($documents);
        $this->assertTrue($result->isAcknowledged());
        $this->assertSame(3, $result->getInsertedCount());
        $this->assertSame([0, 1, 2], array_keys($result->getInsertedIds()));
        $this->assertNull($result->getWriteConcernError());
        $this->assertSame([], $result->getWriteErrors());

        $foundDocuments = $this->findAllDocuments();
        $this->assertSame('bar', $foundDocuments[0]['foo']);
        $this->assertSame('baz', $foundDocuments[1]['bar']);
        $this->assertSame('egg', $foundDocuments[2]['spam']);
    }

    /**
     * @covers \Tequila\MongoDB\Collection::insertOne()
     */
    public function testInsertOne()
    {
        $result = $this->getCollection()->insertOne(['foo' => 'bar']);
        $insertedId = $result->getInsertedId();
        $this->assertTrue($result->isAcknowledged());
        $this->assertInstanceOf(ObjectID::class, $insertedId);
        $this->assertNull($result->getWriteConcernError());
        $this->assertSame([], $result->getWriteErrors());

        $documents = $this->findAllDocuments();
        $this->assertCount(1, $documents);
        $this->assertSame((string) $insertedId, (string) $documents[0]['_id']);
        $this->assertSame('bar', $documents[0]['foo']);
    }

    /**
     * @covers \Tequila\MongoDB\Collection::listIndexes()
     */
    public function testListIndexes()
    {
        $this->createIndexes();

        $indexes = $this->getCollection()->listIndexes();
        $indexNames = array_column($indexes, 'name');
        $this->assertSame(['_id_', 'foo_1_bar_1', 'baz_-1', 'nullable_-1'], $indexNames);
        $this->assertTrue($indexes[2]['unique']);
        $this->assertTrue($indexes[3]['sparse']);
    }

    /**
     * @covers \Tequila\MongoDB\Collection::replaceOne()
     */
    public function testReplaceOne()
    {
        $this->bulkInsert([['foo' => 'bar']]);

        $this->getCollection()->replaceOne(['foo' => 'bar'], ['bar' => 'baz']);

        $documents = $this->findAllDocuments();
        $this->assertSame('baz', $documents[0]['bar']);
        $this->assertArrayNotHasKey('foo', $documents[0]);
    }

    /**
     * @covers \Tequila\MongoDB\Collection::updateMany()
     */
    public function testUpdateMany()
    {
        $this->bulkInsert([
            ['city' => 'New York', 'population' => 8500000],
            ['city' => 'Kiev', 'population' => 3000000],
            ['city' => 'Miami', 'population' => 400000],
        ]);

        $this->getCollection()->updateMany(
            ['population' => ['$gt' => 1000000]],
            ['$set' => ['megacity' => true]]
        );

        $cursor = self::getManager()->executeQuery(
            self::getNamespace(),
            new Query(['megacity' => true]),
            new ReadPreference(ReadPreference::RP_PRIMARY)
        );

        $cityNames = array_column($cursor->toArray(), 'city');
        $this->assertSame(['New York', 'Kiev'], $cityNames);
    }

    public function testUpdateOne()
    {
        $this->bulkInsert([
            ['city' => 'New York', 'population' => 8500000],
            ['city' => 'Kiev', 'population' => 3000000],
            ['city' => 'Miami', 'population' => 400000],
        ]);

        $this->getCollection()->updateOne(
            ['population' => ['$gt' => 1000000]],
            ['$set' => ['megacity' => true]]
        );

        $cursor = self::getManager()->executeQuery(
            self::getNamespace(),
            new Query(['megacity' => true]),
            new ReadPreference(ReadPreference::RP_PRIMARY)
        );

        $cityNames = array_column($cursor->toArray(), 'city');
        $this->assertSame(['New York'], $cityNames);
    }

    /**
     * @return Collection
     */
    private function getCollection()
    {
        $manager = new Manager();

        return new Collection(
            $manager,
            self::getDatabaseName(),
            self::getCollectionName(),
            ['typeMap' => ['root' => 'array', 'document' => 'array', 'array' => 'array']]
        );
    }

    private function listIndexes()
    {
        $command = new Command(['listIndexes' => self::getCollectionName()]);
        $cursor = static::getManager()->executeCommand(
            static::getDatabaseName(),
            $command,
            new ReadPreference(ReadPreference::RP_PRIMARY)
        );

        return $cursor->toArray();
    }

    private function bulkInsert(array $documents)
    {
        $bulkWrite = new BulkWrite();

        foreach ($documents as $document) {
            $bulkWrite->insert($document);
        }

        self::getManager()->executeBulkWrite(self::getNamespace(), $bulkWrite);
    }

    private function findAllDocuments()
    {
        $query = new Query([]);

        $cursor = self::getManager()->executeQuery(self::getNamespace(), $query);
        $cursor->setTypeMap(['root' => 'array', 'document' => 'array']);

        return $cursor->toArray();
    }

    private function createIndexes()
    {
        $indexes = [
            ['key' => ['foo' => 1, 'bar' => 1], 'name' => 'foo_1_bar_1'],
            ['key' => ['baz' => -1], 'name' => 'baz_-1', 'unique' => true],
            ['key' => ['nullable' => -1], 'name' => 'nullable_-1', 'sparse' => true],
        ];

        $command = new Command(
            ['createIndexes' => self::getCollectionName(), 'indexes' => $indexes]
        );

        self::getManager()->executeCommand(self::getDatabaseName(), $command);
    }

    private function dropCollection()
    {
        $readPreference = new ReadPreference(ReadPreference::RP_PRIMARY);
        $dropCollectionCommand = new Command(['drop' => self::getCollectionName()]);
        try {
            self::getManager()->executeCommand(self::getDatabaseName(), $dropCollectionCommand, $readPreference);
        } catch (MongoDBRuntimeException $e) {
            if ('ns not found' !== $e->getMessage()) {
                throw $e;
            }
        }
    }
}


Hello World. This is Videogame Crosstalk, Episode 020, the monthly podcast of Gamers talking about Tech, Science, and whatever else comes to mind! I am your host, Anthony Rossi and with me this episode is Registered Dietitian, Jessika Leary!
"Haven't played but still want to" list of 2017.