text:
Kentucky Health Policy Institute
KentuckyOne Health To Sell Its Major Assets In Louisville.
Beginning last Thursday, word began trickling out to journalists and the public that KentuckyOne Health, a major regional unit of Catholic Health Initiatives (CHI), was preparing to announce plans to sell almost all its hospitals and medical centers in Louisville and a handful elsewhere in the state. I had been told earlier in the week that the announcement would be made today, Monday, but there were so many leaks that KentuckyOne sent an email to its employees outlining its plans. I presume KentuckyOne wanted take control of the message before the reportage dam broke. The email can be read here.
For those of us in Louisville, the only major facility not being sold is Our Lady of Peace, a psychiatric hospital. Both of KentuckyOne's acute care hospitals, (Jewish Hospital and Sts. Mary and Elizabeth Hospital), the Frazier Rehabilitation Institute, and all four outpatient Medical Centers (Jewish East, South, Southwest, and Northeast) are on the chopping block. Nearby Jewish Hospital Shelbyville, which recently underwent a critical review by the Inspector General for an EMTALA violation, is also for sale. KentuckyOne employs many physicians. The fate of individual owned- or contracted medical practices in Louisville and elsewhere is not clear to me from the email.
This is not a surprise. The expansion bubble has burst.
KentuckyOne Health was formed when Catholic Health Initiatives (CHI) merged its St. Joseph Hospital network in Kentucky with CHI's Jewish Hospital/Sts. Mary & Elizabeth Hospitals in Louisville. In 2012, after an aborted attempt by University of Louisville Administration's President Ramsey and Vice-President Dunn to sell state-owned University of Louisville Hospital to CHI, University Hospital became part of KentuckyOne through a joint operating agreement. From its beginning, the partnership of the University and KentuckyOne did not meet the expectations of either party. In fact, I have heard from more than one reliable source, that CHI/KentuckyOne floated the sale of one or more of its hospitals earlier over the past 3 years, including Jewish. As detailed in these pages and elsewhere, KentuckyOne's operations in Kentucky in general, and Louisville in particular, have been one of the very weakest links in CHI's national operations. CHI's bond ratings have progressively fallen and the company has been given a negative rating by several bond-rating agencies. We have seen more than one wave of major layoffs of employees and executives nationally. Quality has taken a hit in Louisville. To raise money, CHI recently sold off $725 million worth of its medical office buildings. I understand that there is some $850 million in deferred maintenance of its facilities in Kentucky with a good piece of that in Louisville. CHI is in the red nationally with respect to operational revenues and is currently exploring a merger with Dignity- another Catholic Hospital System– which itself has a substantial debt obligation. To proceed in such a merger, CHI needs to get its books in better order. I suspect that bad circumstances are demanding even more drastic action.
Much has and will be written about how UofL, Jewish Hospital, and KentuckyOne came to this unfortunate end. Some will blame it on Obamacared. It is clear to me however, that the downward slide of Jewish Hospital began long before its operational merger with University Hospital. Indeed, that partnership was explicitly intended as much to save Jewish Hospital as it was to help University. It has not turned out that way. KentuckyOne's collapse gave the University the ammunition it needed to withdraw from the Joint Operating Agreements with minimal if any financial penalties, and perhaps a shiny new hospital to boot.
This is a big deal for Louisville.
Make no mistake about it, our medical landscape is about to undergo a major reorganization. Existing systems and hospitals will seek to adjust their affiliations and rearrange their footprints. Almost everything medical I can think of is likely to be impacted. There is too much for me to offer in a single article, but allow me to start with a few highpoints.
Who would want to buy into our present mess?
I am told that KentuckyOne will issue today a Proposal for Purchase. (I do not have such yet. Please send if you have seen it.) I am unaware if the facilities are being offered as a single unit or in pieces. The four suburban Medical Centers can be used for a variety of purposes and may be easier to dispose of to outside or local buyers for both medical and non-medical uses. I have some doubts about the attractiveness of the acute care hospitals, Jewish and the Saints M&E. Both are operating at less than their licensed bed capacity with closed and unstaffed units. A buyer would need to determine if Louisville still needs as many beds in the same places. Of course, for the right (low) price, a buyer might buy the bricks and mortar for a different kind of medical facility such as a long-term hospital, psychiatric hospital, cancer hospital, physician-owned hospital, or the like. Jewish Hospital sits is in two main parts– an older facility on Chestnut St., and a new hospital tower. Different lookers might be interested in one or the other separately and for different reasons.
An outside buyer needs to appraise the competition it would face. Should a for-profit operator enter Louisville, it would face a buzz-saw of cooperating opposition from the current non-profits just as Humana did. At least one for-profit potential buyer with earlier interests in Kentucky is currently having hard time on its own.
Assimilation of KentuckyOne facilities by existing Louisville entities?
It may well be that CHI/KentuckyOne has already lined up a buyer for some or all of its properties. Frankly, unless KentuckyOne can insist on a single buyer for all its facilities (it will surely not be able to do so), I think it is likely that other existing Louisville or Kentucky entities will pick of some of the pieces. Here are at least four, in order of least likelyhood.
Commonwealth of Kentucky/ University of Kentucky.
During my lobbying years beginning with the "Bucks-for-Brains" initiative, I was asked more than once by non-Louisville legislators why we needed the overhead of two medical schools. Why do we? The lack of cooperation between the two academic medical centers has not always been good for Kentucky. I have written specifically about how our pediatric cardiology programs and organ transplantation programs have suffered from a studied lack of cooperation with the result that Kentuckians have to go out-of-state for sophisticated services that we ought to be able to provide on our own. The University of Kentucky has already indicated its willingness to provide services in Louisville. The longer it takes for UofL to get its administrative and accreditation acts together, the easier it will be for UK to assume the state flagship role it probably believes it deserves.
An old "new" VA Hospital?
This idea has been floated for some time by those opposed to the site at Brownsboro Road. The University and downtown boosters may now also be pushing the idea. I will be truly surprised to see that happen however. The veterans themselves have been almost universally very much opposed to any downtown location. If the VA Administration and our federal legislators have been listening to the Vets themselves, we will stick with the Brownsboro Rd. location.
I also suspect that the VA itself will have major reservations. I was a federal lobbyist for UofL when a Robley Rex replacement VA hospital was being contemplated. The University offered to incorporate the VA into University Hospital. It was a non-starter from Washington's viewpoint. You might imagine that a heavily bureaucratic organization with military roots will stick fairly rigidly to its policy and specifications. They like command and control. There is a reason that a VA hospital can be identified from afar. While I am on record of favoring incorporating the medical care of our veterans into the same facilities as the rest of us, I do not think we are there yet. That may be more feasible when we have the single payer system that will emerge from the ashes of the meltdown that we may now be entering! Having said that, the political times, they are a changing. Who knows what backroom arrangements might be possible.
Norton Healthcare.
I expect to see Norton playing a role in the ultimate disposition of at least the downtown KentuckyOne facilities. I predict it will in part do so in collaboration or partnership with the University with which it has begun a refreshed relationship. It is hard to see a new player compete successfully in a downtown acute-care hospital. Norton seems committed to providing services downtown, which is more than can be said about those hospital systems that left for the suburbs without leaving a footprint behind. Norton has the state's premier Children's Hospital adjacent to its existing Chestnut St. location. There will probably be some anti-trust hurdles to jump over, but control of downtown beds that no one else seems to want could be in Norton's interest. If I were Norton, I would have my particular eye on the impressive cardiac tower that would give Norton a modern hospital building to supplement its older style facility, and a command of the medical center skyline.
Whoever takes control of the current Jewish Hospital (or Sts. Mary & Elizabeth) will also take control of its licensed beds. These would be available to move around within the county, free of certificate of need restrictions. This technique has been used before by both Norton and Baptist and provides a valuable side transaction to a purchase.
University of Louisville.
I predict that UofL will emerge from the scrim with control of at least some part of KentuckyOne's properties. In fact, I suspect it may get some on the cheap as part of the financial settlement currently being negotiated. UofL might get property instead of promised academic and research funds that it alleged it did not receive, or outstanding clinical billings that were KentuckyOne's responsibility. The UofL Board of Trustees has already approved a new corporate structure that puts more distance between the University and University Hospital. Osensively this is to "protect" the University from financial exposure in a time of great changes in healthcare, but it appears to me that the new organizational structure also allows the necessarily UofL-aligned entity to acquire or participate in the management of other hospitals!
A single door for patients to enter University Care.
One of the main reasons UofL entered its partnership with KentuckyOne was to have a facility to admit the private patients of its faculty practices. I doubt that desire has gone away. If I were King at UofL, I would want control of an attractive clinical facility adjacent to my academic facilities that would expand my hospital options– but not in any way that perpetuates the segregated, separate-and-unequal structure now in place. I will probably write more about this issue in future articles because what scares me the most is what will happen to medical services to indigent, uninsured, and underinsured people of Lousiville as a result of the collapse of KentuckyOne Health.
When I arrived in Louisville in 1984, Norton Hospital was a true teaching hospital for UofL together with University Hospital, Children's Hospital and the VA. For purposes of Medical School accreditation, Jewish Hospital was not a major teaching hospital at that time. A teaching hospital has clinical services in which medical students, interns, and residents are regularly scheduled to participate hands-on in the care of all patients. A school of medicine needs to serve a patient population whose population is diverse in both socioeconomic status and diagnoses. University Hospital alone, as it is, is insufficient. In those past years, Norton was the largest hospital provider to the Medical School of both housestaff salaries and research support. A change in University administration and a willing participation by Jewish Hospital in the University's commercial research initiatives swung the always delicate UofL minuet with its downtown partners strongly towards Jewish. The attempt by UofL's Ramsey/Dunn administration to wrest Children's Hospital away from Norton was the last bridge to be burned. Fortunately, the foundation of that bridge in the form of the Department of Pediatrics remained in place. A new cooperative management structure to run what is now Norton Children's Hospital is working well and may provide an example for both Norton and the University to cooperatively manage a downtown acute-care hospital, a cancer hospital, a transplantation service, or even a rehabilitation hospital. All of these services are important for UofL's School of Medicine. I believe that the University has both the most to lose or the most to gain by what will emerge from the collapse of KentuckyOne.
One does not ask of one who suffers: What is your country and what is your religion? One merely says, you suffer. This is enough for me, you belong to me and I shall help you. –Louis Pasteur.
I have already alluded to my major concern about how Louisville will deal with its disadvantaged sick following the withdrawal of KentuckyOne. One of the hospital's oldest names was the Jewish Free Hospital. In its early years, it was a hospital in Louisville were a Jewish or a black physician or their patients could be served. In a study of breast surgery in Kentucky that I conducted in the 1990s, I observed that Jewish Hospital still took care of more than its share of minority and indigent patients. The same could not be said of every Louisville or Kentucky hospital. I do not know to what extent any Jewish Hospital Phoenix arising from the ashes of this mess can keep its name or mission, but I hope it is possible to do so.
Who takes care of the poor now?
One way Medicare supports the charity and teaching missions of its participating hospitals is to pay more for every Medicare admission to hospitals that serve a disproportionate share of the poor, and to hospitals with medical residents. One of the changes of Obamacared was to restructure the distribution of available funding to align better with the actual number of uncompensated bed-days filled by patients at a given hospital. The scope of "uncompensated" is tricky to define, let alone to reliably measure. In its present iteration, the proportion of bed-days used by Medicaid patients and dual-eligible Medicare-Medicaid beneficiaries serves as a proxy for uncompensated care. To allow hospitals to plan for the coming year, CMS has published a list of the payments they may expect to receive for uncompensated care for this vehicle of hospital assistance.
By this measure, highest on the list was Norton Hospital, which is estimated to receive $21,531,533 under Obamacared . [For Medicare payment purposes, all of Norton's hospitals are a single entity.] The University of Kentucky Hospital was second with $14,002,581. Third on the list was the combined Jewish/Sts. Mary & Elizabeth Hospital with $12,045,312. Fourth on the list was University of Louisville Hospital with $6,845,312. Next highest on the list is King's Daughters Medical Center at $4,728,326. The list begins to fall off rapidly after that. [There are hospitals in Louisville/Kentucky which serve a negligible number of Medicaid in-patients. I will write more about this method of quantifying uncompensated care later.]
Obamacared vs. Trumpcaresnot?
Since its passage, Republican administrations subjected Obamacared to a thousand cuts both large and small which diminished its effectiveness. Shamefully, after hamstringing it, Republicans claim that Obamacared failed and are presenting us with legislation that would take us back to the bad-old-days of the 1980s and 1990s when to have a preexisting illness, or to be unemployed, or to have a partner who was sick, or to be "too expensive to ensure," effectively cast one to the wolves.
What is going to happen if Jewish and Sts. Mary & Elizabeth Hospitals are no longer part of the fabric of healthcare services in Louisville? Who will help take care of the poor? Medicaid expansion was a godsend to patient and provider alike in Obamacared and Beshearcared Kentucky. Safety-net primary care centers made enough money that they could offer additional essential services. University Hospital made enough profit that in addition to its revenues being bled off for University research, it supported Jewish Hospital which was not making a profit. The old back-stop Quality Community Care Trust fund (QCCT) that supported indigent care at University Hospital went into hibernation because it was no longer needed. Neither state or local government pay into it any more. I have made clear my concerns that the QCCT perpetuated a second-class system of care for the poor and minorities. However, if the tag-team of President Trump and Governor Bevin balance their budgets by reducing healthcare services for those who need them, our hospitals and community clinics will collapse under the unfunded burden, and services available in the private arena will go away. Cross-subsidization only goes so far when even those whose medical expenses are paid through arrangements made by their employer or governments are already impossible to manage.
Enough!!
This missive has gone on overlong and I need to stop. KentuckyOne and UofL have kept a lot close to their chests. Few know how bad or good things really are. I certainly do not. I assert however, that while what they may have been agreed between them may serve the two parties well, what happens now is also of critical interest to all the rest of us. What is good for General Motors may not be good for Louisville or Kentucky. I encourage my readers to help flesh out the facts and ramifications of what is coming. If I have misstated any facts, help me correct them. If you have information that is relevant, let the rest of us know. Contact me privately as a conduit if you feel better that way. (See sidebar address.)
Peter Hasselbacher, MD
President, KHPI
Emeritus Professor of Medicine, UofL
Author P HasselbacherPosted on May 15, 2017 July 30, 2017 Categories Health Care Reform, Hospital Mergers, Indigent Care, QCCT Trust, University of Louisville Hospital, Veterans Hospital
2 thoughts on "KentuckyOne Health To Sell Its Major Assets In Louisville."
Pingback: Catholic Health Initiatives Third Quarter Financial Report, FY 2017 – Kentucky Health Policy Institute
A Friend of Jewish Hospital and the University says:
What will happen to the share of KentuckyOne which is owned by the Jewish Heritage Fund for Excellence (Isn't it around 20%?). What I could see happening would be JHFE donating Jewish/Frazier/Medical Centers to UofL with Sts. Mary and Elizabeth being sold. Because Jewish serves such a critical role for certain departments of the UofL School of Medicine (Cardiology, Rehabilitation, Surgery, Emergency Medicine, Family Medicine, Neurology) I think that UofL needs somehow to either take back those services (which would be almost impossible without an investment of hundreds of millions into University Hospital) or to acquire Jewish. It is also true that Jewish has services which could be beneficial to a truly combined University-Jewish Medical Center. They have a brand-new ER, hybrid OR and newer inpatient units with opportunity for expansion on shelled out floors in the Frazier Tower.
Is it not also true that UofL or the state owns the land which Jewish Hospital sits on in a similar situation as Children's Hospital? Is there some sort of limitation which would give the land back if the hospital closed as an acute care facility? The involvement of the Jewish Heritage Fund for Excellence keeps the door open a bit to raise the question about if the Jewish community wants to continue to have a Jewish hospital. It is depressing to see an institution which was once so wonderful fall to a low point. I think that it served as a source of pride of the Jewish community and was truly an institution which brought people together. I sadly think that JHFE has displayed a lack of leadership on this issue and has strayed from the original, healthcare related, mission of JHSMH/JHHS/Jewish Hospital.
I hope that an announcement will come soon and the employees and patients of Jewish/St. Mary's don't have to wait much longer in fear. I think your analysis is spot on by the way. I do think that Norton will shy away from purchasing the KentuckyOne facilities because what they have is working for them and they have little reason to buy Jewish. I think that Norton wouldn't pass an antitrust case in any case and would be subject to years of FTC analysis which would make a deal very hard to get through with the time sensitive nature of KentuckyOne's situation. I think Baptist could be an interesting partner and it would be interesting to see if they would be interested in increasing their level of academic involvement. They are, however, in a difficult financial situation and without a permanent CEO I'm not sure they have the leadership to go with this. With the return of Ken Marshall to University Hospital I think that there is a nexus of leadership there that could take on a project like this.
Previous Previous post: FDA Panel Finds Opana-ER Not Worth The Risk!
Next Next post: Catholic Health Initiatives Third Quarter Financial Report, FY 2017
Find KHPI on Facebook:
Categories Select Category Angioplasty Abuse (24) Blog Administartion (9) Coronavirus (68) Disability (1) Drugs (26) Education (71) Gun Violence (1) Health Care Reform (78) Hospital Mergers (90) Hospitals (34) Indigent Care (27) Medicaid (21) Medical Information (8) Medical Privacy (3) Medicare (11) Norton Kosair Children's Hospital (33) Opioid Abuse (21) Pharmaceutical Industry (6) Politics (17) Prescription Drug Abuse (17) Provider Payments (7) Public Health (2) QCCT Trust (30) Quality & Safety (29) Religious Health Directives (21) Research (11) Single Payer (4) Transplantation (9) Uncategorized (23) University of Louisville Hospital (10) Veterans Hospital (26) Women's Health (1)
Contact KHPI Confidentially
hasselblogger.com
KHPI Home Page
The Incidental Economist
Enter your email address to subscribe to this blog and receive notifications of new KHPI posts by email.
Kentucky Health Policy Institute Proudly powered by WordPress


text:
Khuraman Gasimova (en azerí: Xuraman Qasımova) es cantante de ópera de Azerbaiyán, Artista del Pueblo de la RSS de Azerbaiyán (1986).

Biografía
Khuraman Gasimova nació el 6 de junio de 1951 en Bakú. En 1975 se graduó de la Academia de Música de Bakú. Desde 1976 fue solista del Teatro de Ópera y Ballet Académico Estatal de Azerbaiyán. Khuraman Gasimova participó en los concursos internacionales y ganó muchas medallas. Desde 1982 enseñó en la Academia de Música de Bakú. Desde 1994 es profesor del Conservatorio de Estambul. Khuraman Gasimova ha celebrado muchos conciertos en Bulgaria, Checoslovaquia, Malta, Francia, Austria, Turquía, Finlandia, etc.

Actividades

En teatro
Sevil, Dilber – "Sevil" de Fikret Amirov
Nigar – "Koroğlu" de Uzeyir Hajibeyov
Mimi, Museta – "La bohème" de Giacomo Puccini
Desdémona – "Otelo" de Giuseppe Verdi
Aida – "Aida" de Giuseppe Verdi
Marguerite – "Fausto" de Charles Gounod
Tatiana – "Eugenio Oneguin" de Piotr Ilich Chaikovski
Khurshidbanu Natavan – "Natavan" de Vasif Adigozalov

Filmografía
1966 – "La chica morena"
1968 – "Pero, yo no era bella"
1972 – "La vida nos examina"
1981 – "La vida de Uzeyir"
1981 – "Tierra de música"
1982 – "Constructores de futuro"
1995 – "La llamada"
1998 – "Nuestra tristeza... Nuestro orgullo..."
2002 – "Director de cine Hasan Seyidbeyli"
2007 – "De corazón a corazón"
2007 – "Maestro Niyazi"

Premios y títulos
Artista de Honor de la RSS de Azerbaiyán
Artista del Pueblo de la RSS de Azerbaiyán (1986)
 Orden Shohrat
 Orden Sharaf (2011)

Véase también
Fidan Gasimova

Referencias

Enlaces externos

Mujeres
Personas vivas
Nacidos en Bakú
Azerbaiyanas del siglo XX
Azerbaiyanas del siglo XXI
Cantantes femeninas de Azerbaiyán
Cantantes de la Unión Soviética
Sopranos de Azerbaiyán
Cantantes líricos de Azerbaiyán
Intérpretes de música clásica de Azerbaiyán
Musicólogos de Azerbaiyán
Profesores de música de Azerbaiyán
Profesores de música de Turquía
Actrices de Azerbaiyán
Actrices de cine de Azerbaiyán
Artistas de Honor de la RSS de Azerbaiyán
Artistas del pueblo de la RSS de Azerbaiyán (artes escénicas)
Ganadores de la Orden Shohrat
Ganadores de la Orden Sharaf
Alumnado de la Academia de Música de Bakú
Musicólogas

redpajama_set_name: RedPajamaWikipedia


text:
Karl Friedrich Vierordt (* 18. November 1790 in Karlsruhe; † 19. Dezember 1864 ebenda) war ein deutscher Theologe, Pädagoge und Historiker.

Leben
Vierordt war Sohn des Kammerrats Ernst Jakob Vierordt († 1810). Er besuchte bis 1808 das Karlsruher Lyzeum. Anschließend ging er dem Wunsch der Eltern und Johann Peter Hebels, einer seiner Lehrer und ein Freund der Familie, entsprechend an die Universität Heidelberg zum Studium der Theologie. An das Studium folgte ab 1811 das Vikariat in Weisweil. Von dort ging er nach Yverdon-les-Bains. Dort lehrte er an der Schule des Schulreformers Johann Heinrich Pestalozzi. Nachdem er in Neuenburg in der Schweiz als Hauslehrer tätig war und als Vikar in Diersheim wurde er 1816 Subdiakon sowie Lehrer am Pädagogium Lahr.

Vierordt wechselte, zum Diakon befördert, als Lehrer an seine Heimatschule, an das Karlsruher Lyzeum. Dort wurde er 1823 zum Professor ernannt. 1838 berief man ihn zum Mitglied der evangelischen Kirchen- und Prüfungskommission in Baden. Im Jahr 1855 übernahm er die Rektorenstelle an der Schule. Zu seinem Dienstjubiläum 1856 wurde er von Friedrich I. zum Geheimen Hofrat ernannt und zudem durch die Theologische Fakultät der Universität Heidelberg mit der Ehrendoktorwürde (Dr. theol. h.c.) ausgezeichnet. Im Jahr 1860 trat er in den Ruhestand und bekam nach 1862 das Ritterkreuz des Ordens vom Zähringer Löwen verliehen.

Vierordt hegte bereits früh ein Interesse für die Geschichte, führte seine jedoch Forschungen hauptsächlich in seiner Freizeit aus. Erst 1832 wurde er auch Lehrer der Geschichte am Lyzeum und erst 1844 erhielt er Zugang zum Bayerischen Hauptstaatsarchiv.

Der Physiologe Karl von Vierordt war sein Sohn und der Medizinhistoriker Hermann Vierordt war sein Enkel.

Werke (Auswahl)
 De Johanne Ungero, Pforzhemiensi, Philippi Melanchthonis præceptore. Malsch und Vogel, Karlsruhe 1844.
 Geschichte der evangelischen Kirche in dem Großherzogthum Baden. 2 Bände, Braun, Karlsruhe 1847–1856.
 Geschichte der im Jahre 1724 aus Durlach nach Karlsruhe verpflanzten Mittelschule. 2 Bände, Braun, Karlsruhe 1858–1859.
 Badische Geschichte bis zum Ende des Mittelalters. Laupp, Tübingen 1865 (posthum von Bernhard Kugler herausgegeben).

Literatur
 Theodor Löhlein: Karl Friedrich Vierordt. In: Badische Biographien. Band 2. Bassermann, Heidelberg 1875, S. 405–407.

Weblinks

 Vierordt, Karl Friedrich auf leo-bw.de

Landeshistoriker
Pädagoge (19. Jahrhundert)
Evangelischer Theologe (19. Jahrhundert)
Ehrendoktor der Ruprecht-Karls-Universität Heidelberg
Träger des Ordens vom Zähringer Löwen (Ritter)
Geheimer Hofrat
Person (Karlsruhe)
Schulleiter (Deutschland)
Badener
Deutscher
Geboren 1790
Gestorben 1864
Mann
Absolvent der Ruprecht-Karls-Universität Heidelberg


Zapraszamy szachistów z Warszawy i okolic!
This is a team collecting players from Warsaw, and surrounding region Mazovia. We are going to participate in official city team tournaments like: World Cities League, European Cities League, or Cities World Cup.


text:
Q: Django equivalent of SELECT * GROUP BY in MySQL I'm having troubles using .annotate() and .aggregate() in Django ORM.
My table structure:
-----------------------------------------------------
| id    group_id               date_time            |
| ================================================= |
| 1        1             2020-01-25 19:51:46.603859 |
| 2        2             2020-01-24 18:40:24.301419 |
| 3        1             2020-01-25 20:14:11.123860 |
| 4        2             2020-01-25 05:20:21.507901 |
-----------------------------------------------------

//Edited
I have the following MySQL Query:
SELECT m.*
FROM my_table m
  JOIN (
   SELECT group_id, max(date_time) as max_date
   FROM my_table
   GROUP BY group_id
  ) as s on m.group_id=s.group_id and m.date_time=s.max_date

Which returns:
-----------------------------------------------------
| id    group_id               date_time            |
| ================================================= |
| 3        1             2020-01-25 19:51:46.603859 |
| 4        2             2020-01-24 18:40:24.301419 |
-----------------------------------------------------

And I'm trying to convert it to Django ORM so I can have a full QuerySet of objects. Until now I have been using this code:
unique_qs = MyModel.objects.filter(id__lte=50).values_list('group_id', flat=True).distinct()
unique_obj = []
for qs in unique_qs:
    unique_obj.append(MyModel.objects.filter(group_id = qs).latest('date_time'))

But it's really inefficient and time consuming. Could you give me some lead on how to achieve it?

A: first import Max function as you can see below:
from django.db.models import Max

and then, this is what you need :
MyModel.objects.filter(id__lte=50).values('group_id').order_by('group_id').annotate(date_time_max=Max('date_time'))

redpajama_set_name: RedPajamaStackExchange


The Wesleyan Argus | Congratulations, Men's Hockey!
The men's hockey team Little three title Is very meaningful to me. We are a Wesleyan family. I was '57,my daughter bethel Gorin Gottlieb was '90, her late husband Brian Gottlieb was '88, and their son, my grandson ,David Gottlieb is '22. David's connection to the hockey team as an Argus staff writer makes me smile. His late dad Brian was goalie on the '87 little three championship team. Several years ago after brian's passing ,at a hockey match ,the coach presented his family the '87 little three championship banner and it now hangs in David's dorm room.Go Wes !
Bob Gorin is a member of the Class of 1957.


Wests Tigers have today confirmed that the club will be playing a number of home games out of Western Sydney Stadium from 2019.
The new agreement will see Wests Tigers play four home games at the brand new stadium in 2019, with the club committing to Western Sydney Stadium until at least the end of 2022.
The club will move the four home games previously played at ANZ Stadium to Western Sydney Stadium from 2019, as the NSW Government prepares for the redevelopment of ANZ Stadium.
Western Sydney Stadium will provide 30,000 undercover seats and will bring Members and supporters closer to the action than ever before in Australia.
Wests Tigers CEO Justin Pascoe said that the club was excited by what the future holds at Western Sydney Stadium.
"Western Sydney Stadium is set to be an incredibly impressive facility, which will provide the best game day experience in Australia," said Pascoe.
"We could not walk away from the opportunity to take games to Western Sydney Stadium.
"As a club we owe it to our Members and fans to provide them with the best possible facilities and Western Sydney Stadium will offer a great viewing experience," he said.
"The new stadium will provide us with the opportunity to theme the venue to give it a real home ground feel which I'm sure our players, Members and supporters will appreciate.
"In coming to this decision we've worked closely with Venues NSW and the Stadium operator to ensure that the needs of the club, our players, Members and fans will be met and that the move to Western Sydney Stadium is in the best interests of all parties," said Pascoe.
Wests Tigers Head Coach Ivan Cleary said that the new venue offers all the facilities needed for the team.
"Western Sydney Stadium is going to be a great place to watch and play Rugby League and our players and coaching staff are excited by what the future holds there," said Cleary.
"Key to our success on the field is having the facilities available for the players to prepare pre-game and then recover post-game and this venue has everything we need in the one place.
"I look forward to seeing the stands full with Wests Tigers Members and supporters when we take to the field at Western Sydney Stadium next season," he said.
Western Sydney Stadium will feature the steepest grandstands in Australia, bringing fans close to the action and creating an impressive event experience. The rows of seating have been installed in such a way that it will provide an unprecedented viewing experience for fans.
The new venue will also provide an impressive range of corporate hospitality options, including an exclusive corporate offering where guests can watch players enter and exit the field of play while viewing the game from ground level.
Western Sydney Stadium is easily accessed by public transport, with Wests Tigers 2019 home games at the venue to be confirmed when the NRL draw is launched later this year.


text:
Coding Is the New Language • ALL DIGITAL
26 Jan Coding Is the New Language
Posted at 13:22h in Coding, News by Andrea Bedorin
By Ilona Griniute
On January 20,2015 Microsoft Europe decoded fundamental skills that young people will need to have to be able to stay competitive at any workplace. Invited government representatives, researchers and educators all expressed their viewpoint on how to prepare youth for future jobs and how to introduce coding along with computational thinking in the European curriculum.
Minimum of technical education for everyone
Roberto Viola (Deputy Director General at DG CONNECT, European Commission) believes that any student must have at least a bit of technical education no matter the nature of their studies chosen. 40% of corporations are looking to recruit ICT professionals, but aren't successful. R. Viola said:
"This is about changing society and there's only one effective response – education and educated workforce that matches the need of the market."
The European Commission is passionate about (1) getting young people attracted to ICT professions and (2) getting senior people to use the new technology. Grand Coalition for Digital Jobs initiative strives for this purpose and was formed to engage with IT industry partners.
Business and volunteer initiatives are successful
Microsoft General Counsel and Executive Vice President for Legal and Corporate Affairs Brad Smith addressed the question of how to shape business of 21st century by linking jobs and students. Initiatives like Hour of Code are successful tools to reach out to youngsters. In 2014 Hour of Code reached around 8 million young people in 33 countries to learn coding in just one hour.
According to B. Smith, 12 EU countries have started rolling out new curriculum with ICT as a key competence, but just 3 of them have coding integrated as a compulsory class. B. Smith thinks that
"students will need four fundamental skills: to read, write, count and code. Coding is a language of new machines and technological services that people will need to master."
With its digital literacy programmes Microsoft has reached around 6 million people worldwide.
So why coding?
Microsoft researcher Simon Peyton Jones took over the agenda with an accurate quote by former United States Secretary of Education Richard Riley: "Education should prepare young people for jobs that do not yet exist, using technologies that have not yet been invented, to solve problems of which we are not yet aware." Computing programme was finally introduced as part of national curriculum in the UK in September 2014.
Some young people are ahead with getting hold of coding. Roxana Rugina established her own business in Romania after unsuccessfully finding a job in France with 2 master's degrees and re-qualifying in web development. Architecture student Beatrice Viotti from Italy developed an app to promote her region. 14-year-old Panos Economou from Greece won the Kodu Kup competition last year and continues to relate his future to coding.
What can we learn so far?
Lively debate followed the event agenda and was focused around best practice from Ireland, Bulgaria, Norway and Estonia. Mary Maloney (CEO of Coder Dojo, Ireland) stressed the fact that coding should be related to creativity which can act as an important motivator when kids get to choose the activity.
"Coder Dojo engaged around 30% of women in our initiative thanks to communicating the message through the aspect of creativity", she said.
Besides, the mother is an important role model for a child. Thus, parents should have an act of engagement in what kids are doing after school, suggests M. Maloney, and points out that one of parents is asked to always accompany a child to a Coder Dojo club to observe and stay involved.
Kiril Rusev, who founded an IT start-up Jumpido in educational sector, expressed his concern that kids in Bulgarian primary schools are still labelled by gender stereotypes while teachers do not have the right competences to teach coding. He calls for a best practice sharing and research findings to be shared with policy makers to improve the present situation in his country.
Next generation of tech innovators present their stories: Panus, Roxana and Beatrice
Oystein Imsen, a teacher from Norway and EU Code Week Ambassador, believes that it is important to get kids started coding in kindergarten, but without tech devices not to evoke negative reactions from parents. O. Imsen paid his attention to one economical factor preventing coding as activity at schools – the publishing industry. Hence, in the long run the top-down approach from policy makers like in UK is necessary for the actual change to happen in the rest of Europe.
According to Kadri Kukk (Microsoft Estonia, Hour of Code Baltics), the role of after school ICT activities is important. Around 40% of surveyed respondents in Estonia said they have learnt coding after school in coding clubs and similar places. K. Kukk thinks that both private donors as well as governmental support are needed to drive the change.
Initiatives like the European Code Week, Hour of Code and Coder Dojo sessions with MEPs can influence policy makers and urge them to support implementing changes at schools and beyond. For now the minimum that local authorities can do is to give resources like hardware, provide spaces and financial support so young people can start coding today.
CODINC – Coding for Inclusion The BRIGHTS informative kit on Global Citizenship Education (GCE) for policy makers Digital Skills and Jobs Coalition CODEMOB – Teaching coding and mobile devices in telecentres
coding, education, employability, Microsoft, young people, youth

redpajama_set_name: RedPajamaCommonCrawl


text:
Q: Not getting complete data using selenium I am not getting all links there are 403 links in these page I am getting only 68 links I also used the scroll down method they move to end of page but not give all links is any thing I am doing wrong kindly guide us these is page link https://www.ocado.com/search?entry=frozen
from selenium import webdriver
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support.select import Select
from selenium.webdriver.support import expected_conditions as EC
import pandas as pd
url='https://www.ocado.com/search?entry=frozen'
PATH="C:\Program Files (x86)\chromedriver.exe"
driver =webdriver.Chrome(PATH)
driver.get(url)
SCROLL_PAUSE_TIME = 50
last_height = driver.execute_script("return document.body.scrollHeight")

while True:
    # Scroll down to bottom
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

    # Wait to load page
    time.sleep(SCROLL_PAUSE_TIME)

    # Calculate new scroll height and compare with last scroll height
    new_height = driver.execute_script("return document.body.scrollHeight")
    if new_height == last_height:
        break
    last_height = new_height

t=driver.find_elements(By.XPATH, "//div[@class='fop-contentWrapper']")
for l in t:
    links= l.find_element(By.XPATH, ".//a[starts-with(@href, '/products')]").get_attribute("href")
    print(links)

A: With this should be enough:
# Needed libs
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

# We create the driver
driver = webdriver.Chrome()

# We maximize the window, because if not the page will be different
driver.maximize_window()

# We navigate to the url
url='https://www.ocado.com/search?entry=frozen'
driver.get(url)

# We click on acceptbutton cookies pop up
WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.XPATH, "//button[@id='onetrust-accept-btn-handler']"))).click()

# We take the show_more_button, which is at the bottom
show_more_button = driver.find_element(By.XPATH, "//button[text()='Show more']")

# We take latest product which contain the info we want, that product will be more or less in the middle of the page because it is the latest one which is loaded
last_element_with_link = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.XPATH, "//div[@class='fop-contentWrapper']/a[last()]")))

# If the location of the show_more_button - last_element_with_link location is bigger than 500 px means we did not arrive till the end of list
while show_more_button.location['y'] - last_element_with_link.location['y'] > 500:
    # We get the location of the new last_element_with_link because we should have more elements
    last_element_with_link = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.XPATH, "//div[@class='fop-contentWrapper']/a[last()]")))
    # We do till we arrive to the position of this new last_element_with_link
    print(f"Scroll to px: {last_element_with_link.location['y']}")
    driver.execute_script(f"window.scrollTo(0, {last_element_with_link.location['y']})")
    # small sleep to give time to the page
    time.sleep(0.1)

# Here we now we are at the botton, so we can take the links
list_of_elements = WebDriverWait(driver, 20).until(EC.presence_of_all_elements_located((By.XPATH, "//div[@class='fop-contentWrapper']/a")))
print(len(list_of_elements))
# For each element we print the url
for element in list_of_elements:
    print(element.get_attribute('href'))

Actually there are 403 products per page


text:
Discrimination Complaint Filed Against Winston-Salem/Forsyth County Schools
North Carolina Public Radio | By Anita Rao,
Frank Stasio
Supporters of the Action4Ashley campaign wore shirts with bold hashtags at a meeting of the Winston-Salem/Forsyth County school board.
Andrew Dye / Winston-Salem Journal
Reverend Alvin Carlisle speaks at a news meeting for the Action4Ashley campaign and advocates for the construction of an entirely new building.
David Rolfe / Winston-Salem Journal
A coalition of concerned community members and activists filed a federal discrimination complaint Monday against the Winston-Salem/Forsyth County Board of Education and School System. It alleges that they mishandled concerns about mold and air quality at the elementary school Ashley Academy for Cultural & Global Studies, which serves a predominantly black and Latino population in eastern Winston-Salem.
Teachers have been voicing concerns about building issues, and the school board eventually approved $1.2 million in maintenance work for the school. However, according to the complaint, the response was slow and inadequate. The coalition, known as Action4Ashley, is asking the district to build a new facility for the school and provide support for students and teachers who have suffered as a result of the conditions.
Host Frank Stasio talks with Michael Bragg, an education reporter for the Winston-Salem Journal, about his reporting on the story and what he learned about teachers' complaints from emails obtained through a Freedom of Information Act request.
Education The State of ThingsMichael BraggWinston Salem JournalBoard of Education
Anita Rao
Anita Rao is an award-winning journalist and the host and creator of "Embodied," a weekly radio show and podcast about sex, relationships & health. She's also the managing editor of WUNC's on-demand content.
See stories by Anita Rao
Longtime NPR correspondent Frank Stasio was named permanent host of The State of Things in June 2006. A native of Buffalo, Frank has been in radio since the age of 19. He began his public radio career at WOI in Ames, Iowa, where he was a magazine show anchor and the station's News Director.
See stories by Frank Stasio
State Report Tallies Teachers Who Left Their Schools
Liz Schlemmer
The State Board of Education this week heard a draft report on the State of the Teaching Profession. The annual report details the attrition rates for…
Standardized Test To Offer Charter Insight
Lisa Philip
For the first time in three years, researchers will be able to compare how students in North Carolina's voucher program compare to their peers in public…
Republicans look to take governor's power from NC education board
The legislation would put an amendment question on the ballot this November that if approved would have nearly all board members elected by the public. A bill sponsor says the change would give parents greater influence over their children's education.
Sex And Bodies Belong In Our Headlines. WUNC To Continue Broadcasting Embodied
Grant Holub-Moorman
Back in November, WUNC chose to discontinue "The State of Things," North Carolina's only live public radio program heard in the mountains, on the coast…
Hidden Symbols in Quilla's New Album, 'The Handbook of Vivid Moments'
Anna Luisa Daigneault, known as Quilla, is the audio muse that makes the Embodied podcast sparkle. WUNC collaborated with Quilla to craft the theme for…
Frank Stasio's Fondest Shows: Meet Little Brother
In 2003, Frank Stasio spent time in North Carolina guest hosting The State of Things, and one of the conversations from his early days on the show is one…
Frank Stasio's Fondest Shows: The Bucket Brothers Tune Their Talents
Logan Valleroy and Casey Valleroy might be teenagers, but their musical prowess makes them seem like professional musicians. The brothers have been…


War Psalms sees MORNING GLORY's style elevated to new heights. MG's songs are already identified by their anthemic choruses, evocative crescendos, and diverse arrangements, but War Psalms offers something even greater.
297 on grey vinyl. No Longer Available.


text:
Ein Kontrolldelikt ist eine Straftat, deren Auftreten durch Kontrollen von Polizei oder Sicherheitspersonal überhaupt erst festgestellt wird – ohne Kontrolle bleibt sie unbemerkt.

So sind zum Beispiel
Verstöße gegen das Betäubungsmittelgesetz
Ladendiebstahl
Beförderungserschleichung
Menschenhandel,
Korruption,
Leistungserschleichung und
Umweltkriminalität

typische Kontrolldelikte.

Kriminalstatistik
Die Anzahl der festgestellten Kontrolldelikte sagt wenig über die Dunkelziffer aus. So kann es durch stärkere Kontrollen zu einer erhöhten Anzahl festgestellter Taten kommen, obwohl die Anzahl der tatsächlichen Taten gleich geblieben oder sogar gesunken ist. Andersherum kann die Anzahl der festgestellten Taten aber auch gleich bleiben oder infolge seltenerer Kontrollen sogar sinken, obwohl die Zahl der begangenen Taten sich erhöht hat.

Einzelnachweise

Kriminalität


text:
Coquitlam College is a member of the British Columbia Council on Admissions and Transfer (BCCAT) system and has established transfer agreements with colleges and universities across British Columbia.
What is University Transfer?
Transfer is when one post-secondary institution recognizes and gives full credit for courses taken at another institution. The University Transfer Program at Coquitlam College offers fully transferable courses which allow students to complete up to 60 transferable credits (20 courses), or up to half of the total of their University undergraduate coursework, before applying to complete the remaining 60 credits of an Undergraduate Degree at a university.
The BC Transfer Guide allows students to view the equivalencies of their coursework completed at Coquitlam College compared with other post-secondary institutions, both colleges and universities, throughout British Columbia.
This means if students do not meet the admission requirements for entering a BC university directly from high school, they may be eligible to apply for admission later as a transfer student. Students can complete up to two years credit (and sometimes more!) and transfer to a university to finish their degree.
Find out more about how Transfer works by visiting: http://www.bctransferguide.ca/transfer/how
The BC Transfer Guide lists all courses and programs where transfer agreements have been established between members of the BC Transfer System. For the full list of the BC Transfer Guide, please visit the following link: http://www.bctransferguide.ca/


What is a monopoly? Continuing the market structure discussion - FreeEconHelp.com, Learning Economics... Solved!
A monopoly exists when there is only one seller of a good, and that good has no close substitutes. For this reason, a monopoly is considered the opposite of perfect competition. If you were to imagine the different market structures as a continuum, then perfect competition and monopoly would be on opposite sides, with various forms of monopolistic competition and oligopolies in the middle.
1. Only one firm sells a product or good.
2. There are no close substitutes to that good.
3. There are barriers to entry protecting the monopoly from competition.
Monopolies may form naturally because of economic conditions or may be a result of government regulation. Economic conditions can cause monopolies to form because of the presence of increasing economies of scale, or because they have control over the supply of raw materials. Government regulation can create monopolies through the use of patents, or the creation of government franchises.
The most common examples of monopolies which we deal with are utility companies. In particular think about how you purchase your electricity, water, and cable TV. For most places it makes sense to have only one company provide electricity, and this is because they enjoy economies of scale. This means that the marginal cost of producing the next unit of power is cheaper than the last. If one company can produce things cheaper, than several companies can together, why would we want MORE than one company? This is why these types of businesses generally get permission to run their monopoly from the government, but is likewise heavily regulated.
Monopolies have to be regulated, because essentially, they alone are the supply side of the market. This means they get to dictate how much will be supplied to the market, and therefore what the price will be. This means that monopolies will directly interact with the demand function. Their goal will be to increase production/output until the marginal cost of production is set equal to their marginal revenue.
An easy way to remember the properties of a monopoly is to consider the class game monopoly. What is the point of the game? You want to buy up all of the similar properties so that your opponent has to pay a higher price! This is exactly what goes on in the real world. By buying up all similar substitutes (same colored properties) then the players have no choice but to pay your high prices!


text:
Q: How to know if all onload Events already fired? This question is a more specific and a superset of this question: How to know if window "load" event was fired already .
Use Case
So I have this use case where I need to make a lazy loaded CSS-only slideshow of pictures and for that I realized it thru onload Events which fire with the slide number, which fires after a delay only when the picture finished loading the picture in question. The problem is that the suggested answer shows 'complete' after the first onload Event fired, which is not fitting for me.  So my question is - how do I detect whether all onload Events already fired?
The problem
All my slides go thru and afterwards the slideshow misbehaves. That's why I need to detect that condition so that I can control my slide behaviour after the fact and so fix this problem.
StackBlitz Link
https://stackblitz.com/edit/js-fsymew
GitHub Link
https://github.com/munchkindev/js-fsymew
My HTML:

Text here, you can just ignore this.

<button class="slider-button slider-black slider-display-left" onclick="changeSlide(-1);">❮</button>
<button class="slider-button slider-black slider-display-right" onclick="changeSlide(1);">❯</button>

JS:
function carousel(n) {
  var i;
  var x = document.getElementsByClassName("slider");
  if (n === 6) { delayedCarousel(1); }
  //for (i = 0; i < x.length; i++) {
    x[n].style.display = "block";
    if (n === 1) x[5].style.display = "none";
  //}
  slideIndex++;
  //if (n > x.length) {/*slideIndex = 1*/
      x[n-1].style.display = "none";
  //setTimeout(carousel, 5000); // Change image every 5 seconds
}
function delayedCarousel(n) {
    setTimeout(function(){
      carousel(n);
    }, 3000);
    }

function changeSlide(n) {
    showDivs(slideIndex += n);
}

function showDivs(n) {
    var i;
    var x = document.getElementsByClassName("slider");
    if (n > x.length) { slideIndex = 1 }
    if (n < 1) { slideIndex = x.length }
    for (i = 0; i < x.length; i++) {
        x[i].style.display = "none";
        x[i].style.width = "100%";
    }
    x[slideIndex - 1].style.display = "block";
}

Try 2
HTML:

Ignore this text, it's irrelevant.

<button class="slider-button slider-black slider-display-left" onclick="changeSlide(-1);">❮</button>
<button class="slider-button slider-black slider-display-right" onclick="changeSlide(1);">❯</button>

JS:
//   function startSliderLoop() {
//            var i = 1;
//        setInterval(function() {
//            location.href = "/#slide-"+i;
//   //document.addEventListener('click', function (event) {

//  // If the clicked element does not have and is not contained by an element with the .click-me class, ignore it
//  //if (!event.target.closest('#slideButton'+ i )) return;

//  // Otherwise, do something...
//    if (i <= 5)
//    i++;
//    else
//    i = 1;
//}, 3000)
//    }
//    document.addEventListener("DOMContentLoaded", (event) => {
//    startSliderLoop();
//});
var slideIndex = 0;
var sliders = document.querySelector('.slider');
//document.querySelector('.slider').forEach(function(img){
//      img.addEventListener('load', carousel());
//    });

function carousel(n) {
  var i;
  var x = document.getElementsByClassName("slider");
  if (n === 6) { delayedCarousel(1); }
  //for (i = 0; i < x.length; i++) {
    x[n].style.display = "block";
    if (n === 1) x[5].style.display = "none";
  //}
  slideIndex++;
  //if (n > x.length) {/*slideIndex = 1*/
      x[n-1].style.display = "none";
  //setTimeout(carousel, 5000); // Change image every 5 seconds
}

function loopedCarousel(n) {
  var i;
  var x = document.getElementsByClassName("slider");
  if (n === 5) { n=1; loopedCarousel(1); }
  //for (i = 0; i < x.length; i++) {
    x[n].style.display = "block";
    if (n === 1) x[5].style.display = "none";
  //}
  slideIndex++;
  //if (n > x.length) {/*slideIndex = 1*/
      x[n-1].style.display = "none";
  setTimeout(loopedCarousel(n+1), 5000); // Change image every 5 seconds
}
function delayedCarousel(n) {
    setTimeout(function(){
      carousel(n);
    }, 3000);
    }

A: I would use promises to listen to image load events, this way you can wait for all the promises to complete before initiating your carousel.
For example, if you had the below html:

You could wait for all these to load with something like:
const promises = [];
document.querySelectorAll('img').forEach((img) => {
  const promise = new Promise((resolve, reject) => {
    img.addEventListener('load', resolve);
    img.addEventListener('error', reject);
  });
  promises.push(promise);
});

Promise.all(promises).then(() => {
  console.log('All images successfully loaded.');
});

I've created working example for you below. You'll notice that before all the images have loaded the carousel will display a red border. Once loaded the border color changes to green.

class CarouselController {

    /**
     * @param {object} settings
     */
    constructor(settings) {
        this.carousel = settings.element;
        this.current = 0;

        if (!this.carousel) {
            throw 'A carousel element is required. For example: new CarouselController({ element: document.getElementById(\'carousel\') })';
        }

        this.settings = {
            loop: 'loop' in settings ? settings.loop : true,
            delay: 'delay' in settings ? parseInt(settings.delay) : 5000
        };
    }

    /**
     * Get the carousel container element.
     * @returns {Element}
     */
    getCarousel() {
        return this.carousel;
    }

    /**
     * Get a setting value.
     * @param {string} name
     * @param defaultValue
     * @returns {*}
     */
    getSetting(name, defaultValue) {
        return name in this.settings ? this.settings[name] : defaultValue;
    }

    /**
     * Get all the children (slides) elements.
     * @returns {Element[]}
     */
    getSlides() {
        return Array.from(this.getCarousel().children);
    }

    /**
     * Get a specific slide by index.
     * @param {int} index
     * @returns {Element|null}
     */
    getSlide(index) {
        return this.getSlides()[index];
    }

    /**
     * Show a specific slide by index.
     * @param {int} index
     * @returns {int}
     */
    goTo(index) {
        const slides = this.getSlides();
        const slide = this.getSlide(index);

        if (slide) {
            slides.forEach((el) => {
                el.classList.remove('active');
            });

            slide.classList.add('active');

            this.current = slides.indexOf(slide);
        }

        return this.current;
    }

    /**
     * Show the next slide (if has one).
     */
    next() {
        let replay = false;

        // Check if carousel is looping through slides automatically.
        if (this.playing) {
            replay = true;
        }

        const slides = this.getSlides();
        let nextIndex = this.current + 1;

        // If the next slide is greater than the total, reset to 0 if looping else use -1 to stop `goTo` method.
        if (nextIndex > (slides.length - 1)) {
            if (this.getSetting('loop')) {
                nextIndex = 0;
            } else {
                nextIndex = -1;
            }
        }

        // Only go to slide if next index is valid.
        if (nextIndex >= 0) {
            this.goTo(nextIndex);

            // Continue with auto play.
            if (replay) {
                this.play();
            }
        }
    }

    /**
     * Show the previous slide (if has one).
     */
    previous() {
        let replay = false;

        // Check if carousel is looping through slides automatically.
        if (this.playing) {
            replay = true;
        }

        const slides = this.getSlides();
        let prevIndex = this.current - 1;

        // If the prev slide is less than 0, reset to the last slide if looping else use -1 to stop `goTo` method.
        if (prevIndex < 0) {
            if (this.getSetting('loop')) {
                prevIndex = slides.length - 1;
            } else {
                prevIndex = -1;
            }
        }

        // Only go to slide if next index is valid.
        if (prevIndex >= 0) {
            this.goTo(prevIndex);

            // Continue with auto play.
            if (replay) {
                this.play();
            }
        }
    }

    /**
     * Automatically go to the next slide (or start if loop is true).
     * @returns {number}
     */
    play() {
        this.stop();

        this.goTo(this.current);

        this.playing = setInterval(() => {
            this.next();
        }, this.getSetting('delay'));

        return this.playing;
    }

    /**
     * Stop the automatic carousel if running.
     */
    stop() {
        if (this.playing) {
            clearInterval(this.playing);
        }
    }

}

/**
 * Get the carousel container element.
 * @type {Element}
 */
const carouselContainer = document.querySelector('.carousel-container');

/**
 * Create a new controller instance for our carousel.
 * @type {CarouselController}
 */
const carousel = new CarouselController({
    element: carouselContainer.querySelector('.carousel'),
    loop: true,
    delay: 3000
});

/**
 * Build an array of image load promises.
 * @type {Promise[]}
 */
const imagePromises = [];
carousel.getCarousel().querySelectorAll('img').forEach((el) => {
    const promise = new Promise((resolve, reject) => {
        const image = new Image();
        image.addEventListener('load', resolve);
        image.addEventListener('error', reject);
        image.src = el.src;
    });
    imagePromises.push(promise);
});

/**
 * Wait for all image promises to complete (even if failed) and initiate the carousel.
 * @link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/allSettled
 */
Promise.allSettled(imagePromises).then(() => {

    carouselContainer.classList.add('loaded');

    /**
     * Start auto playing with settings defined in the constructor.
     */
    carousel.play();

    /**
     * Show previous slide (if has one) when clicking previous button.
     */
    document.querySelector('.carousel-prev').addEventListener('click', function(event) {
        event.preventDefault();
        carousel.previous();
    });

    /**
     * Show next slide (if has one) when clicking next button.
     */
    document.querySelector('.carousel-next').addEventListener('click', function(event) {
        event.preventDefault();
        carousel.next();
    });

});
/* Container styles BEFORE carousel has loaded */
.carousel-container {
  opacity: 0.3;
  pointer-events: none;
  border: 2px solid red;
}

/* Container styles AFTER carousel has loaded */
.carousel-container.loaded {
  opacity: 1;
  pointer-events: auto;
  border-color: green;
}

/* Hide all carousel slides by default */
.carousel-container .carousel > * {
  display: none;
}

/* Only show the active carousel slide */
.carousel-container .carousel > *.active {
  display: block;
}

  <button class="carousel-prev">
    ❮
  </button>
  <button class="carousel-next">
    ❯
  </button>

Or you can view it on JSFiddle here: https://jsfiddle.net/thelevicole/b13gpyfd/2/

Edit
Below is updated example of how to lazy load slide images only when the slide is in view instead of waiting for all images to load on init.
https://jsfiddle.net/thelevicole/b13gpyfd/3/

class CarouselController {

    defaultSettings = {
        loop: true,
        delay: 5000,
        autoplay: true
    }

    /**
     * @param {object} settings
     */
    constructor(settings) {
        this.carousel = settings.element;
        delete settings.element;

        this.current = 0;
        this.hooks = {};
        this.settings = settings;

        if (!this.carousel) {
            throw 'A carousel element is required. For example: new CarouselController({ element: document.getElementById(\'carousel\') })';
        }

        /**
         * Sanitize `loop` setting
         */
        this.addFilter('setting.loop', value => {
            return String(value).toLowerCase() === 'true';
        });

        /**
         * Sanitize `delay` setting
         */
        this.addFilter('setting.delay', value => parseInt(value));

        /**
         * Sanitize `autoplay` setting
         */
        this.addFilter('setting.autoplay', value => {
            return String(value).toLowerCase() === 'true';
        });

        // Autoplay on init.
        if (this.getSetting('autoplay')) {
            this.play();
        }
    }

    /**
     * Get the carousel container element.
     * @returns {Element}
     */
    getCarousel() {
        return this.carousel;
    }

    /**
     * Get a setting value.
     * @param {string} name
     * @param defaultValue
     * @returns {*}
     */
    getSetting(name, defaultValue) {
        if (!defaultValue && name in this.defaultSettings) {
            defaultValue = this.defaultSettings[name]
        }

        /**
         * Apply value filters.
         * @example carousel.addFilter('setting.delay', function(value) { return value + 500; });
         */
        return this.applyFilters(`setting.${name}`, name in this.settings ? this.settings[name] : defaultValue);
    }

    /**
     * Get hooks by type and name. Ordered by priority.
     * @param {string} type
     * @param {string} name
     * @returns {array}
     */
    getHooks(type, name) {
        let hooks = [];

        if (type in this.hooks) {
            let localHooks = this.hooks[type];
            localHooks = localHooks.filter(el => el.name === name);
            localHooks = localHooks.sort((a, b) => a.priority - b.priority);
            hooks = hooks.concat(localHooks);
        }

        return hooks;
    }

    /**
     * Add a hook.
     * @param {string} type
     * @param {object} hookMeta
     */
    addHook(type, hookMeta) {

        // Create new local hook type array.
        if (!(type in this.hooks)) {
            this.hooks[type] = [];
        }

        this.hooks[type].push(hookMeta);
    }

    /**
     * Add action listener.
     * @param {string} action Name of action to trigger callback on.
     * @param {function} callback
     * @param {number} priority
     */
    addAction(action, callback, priority = 10) {
        this.addHook('actions', {
            name: action,
            callback: callback,
            priority: priority
        });
    }

    /**
     * Trigger an action.
     * @param {string} name Name of action to run.
     * @param {*} args Arguments passed to the callback function.
     */
    doAction(name, ...args) {
        this.getHooks('actions', name).forEach(hook => {
           hook.callback(...args);
        });
    }

    /**
     * Register filter.
     * @param {string} filter Name of filter to trigger callback on.
     * @param {function} callback
     * @param {number} priority
     */
    addFilter(filter, callback, priority = 10) {
        this.addHook('filters', {
            name: filter,
            callback: callback,
            priority: priority
        });
    }

    /**
     * Apply all named filters to a value.
     * @param {string} name Name of action to run.
     * @param {*} value The value to be mutated.
     * @param {*} args Arguments passed to the callback function.
     * @returns {*}
     */
    applyFilters(name, value, ...args) {
        this.getHooks('filters', name).forEach(hook => {
            value = hook.callback(value, ...args);
        });

        return value;
    }

    /**
     * Get all the children (slides) elements.
     * @returns {Element[]}
     */
    getSlides() {
        return Array.from(this.getCarousel().children);
    }

    /**
     * Get a specific slide by index.
     * @param {int} index
     * @returns {Element|null}
     */
    getSlide(index) {
        return this.getSlides()[index];
    }

    /**
     * Show a specific slide by index.
     * @param {int} index
     * @returns {int}
     */
    goTo(index) {
        const slides = this.getSlides();
        const slide = this.getSlide(index);

        if (slide) {
            slides.forEach((el) => {
                el.classList.remove('active');
            });

            slide.classList.add('active');

            this.current = slides.indexOf(slide);

            /**
             * Trigger goto event.
             * @example carousel.addAction('goto', function(slide, index) { ... });
             */
            this.doAction('goto', slide, this.current);
        }

        return this.current;
    }

    /**
     * Show the next slide (if has one).
     */
    next() {
        let replay = false;

        // Check if carousel is looping through slides automatically.
        if (this.playing) {
            replay = true;
        }

        const slides = this.getSlides();
        let nextIndex = this.current + 1;

        // If the next slide is greater than the total, reset to 0 if looping else use -1 to stop `goTo` method.
        if (nextIndex > (slides.length - 1)) {
            if (this.getSetting('loop')) {
                nextIndex = 0;
            } else {
                nextIndex = -1;
            }
        }

        // Only go to slide if next index is valid.
        if (nextIndex >= 0) {
            this.goTo(nextIndex);

            // Continue with auto play.
            if (replay) {
                this.play();
            }
        }
    }

    /**
     * Show the previous slide (if has one).
     */
    previous() {
        let replay = false;

        // Check if carousel is looping through slides automatically.
        if (this.playing) {
            replay = true;
        }

        const slides = this.getSlides();
        let prevIndex = this.current - 1;

        // If the prev slide is less than 0, reset to the last slide if looping else use -1 to stop `goTo` method.
        if (prevIndex < 0) {
            if (this.getSetting('loop')) {
                prevIndex = slides.length - 1;
            } else {
                prevIndex = -1;
            }
        }

        // Only go to slide if next index is valid.
        if (prevIndex >= 0) {
            this.goTo(prevIndex);

            // Continue with auto play.
            if (replay) {
                this.play();
            }
        }
    }

    /**
     * Automatically go to the next slide (or start if loop is true).
     * @returns {number}
     */
    play() {
        this.stop();

        this.goTo(this.current);

        this.playing = setInterval(() => {
            this.next();
        }, this.getSetting('delay'));

        return this.playing;
    }

    /**
     * Stop the automatic carousel if running.
     */
    stop() {
        if (this.playing) {
            clearInterval(this.playing);
        }
    }

}

/**
 * Get the carousel container element.
 * @type {Element}
 */
const carouselContainer = document.querySelector('.carousel-container');

/**
 * Create a new controller instance for our carousel.
 * @type {CarouselController}
 */
const carousel = new CarouselController({
    element: carouselContainer.querySelector('.carousel'),
    loop: true,
    delay: 3000,
    autoplay: true
});

/**
 * Lazy load each image only when the slide is in view.
 */
carousel.addAction('goto', function(slide, index) {
    let images = [];

    if (slide.tagName.toLowerCase() === 'img') {
        images.push(slide);
    } else {
        images.concat(slide.querySelectorAll('img'));
    }

    images.forEach((img) => {
        if (!img.src && img.dataset.src) {
            img.src = img.dataset.src;
        }
    });
});

/**
 * Show previous slide (if has one) when clicking previous button.
 */
document.querySelector('.carousel-prev').addEventListener('click', function(event) {
    event.preventDefault();
    carousel.previous();
});

/**
 * Show next slide (if has one) when clicking next button.
 */
document.querySelector('.carousel-next').addEventListener('click', function(event) {
    event.preventDefault();
    carousel.next();
});
/* Container styles */
.carousel-container {}

/* Hide all carousel slides by default */
.carousel-container .carousel > * {
  display: none;
}

/* Only show the active carousel slide */
.carousel-container .carousel > *.active {
  display: block;
}

  <button class="carousel-prev">
    ❮
  </button>
  <button class="carousel-next">
    ❯
  </button>

I've added a hook mechanism to allow callbacks to run everytime the slide changes carousel.addAction('goto', (slide, index) => { ... });

A:

window.onload is run when the window loads. This should be after all elements, scripts, and other stuff loads.


text:
English (pdf)
Journal of the Brazilian Chemical Society
Print version ISSN 0103-5053On-line version ISSN 1678-4790
J. Braz. Chem. Soc. vol.10 no.5 São Paulo Sept./Oct. 1999
The Asymmetric Synthesis of (+)-Sitophilure, the Natural Form of the Aggregation Pheromone of Sitophilus oryzae L. and Sitophilus zeamais M.
Ronaldo A. Pilli*, and Valéria B. Riatto
Instituto de Química, UNICAMP, C.P. 6154, 13083-970 Campinas - SP Brazil
A forma natural do (+)-sitofilure, feromônio de agregação de Sitophilus oryzae L. e Sitophilus zeamais M., foi preparada em 12 etapas, 18% de rendimento total e 82% de excesso enantiomérico a partir da redução microbiológica de 3-oxopentanoato de metila com S. cerevisiae na presença de cloroacetato de etila.
The asymmetric synthesis of (+)-sitophilure, the aggregation pheromone of Sitophilus oryzae L. and Sitophilus zeamais M., was carried out in 12 steps, 18% overall yield and 82% enantiomeric excess from the enzymatic reduction of methyl 3-oxopentanoate with S. cerevisiae in the presence of ethyl chloroacetate.
Keywords: (+)-sitophilure, pheromone, asymmetric reduction, S. cerevisiae
The weevils of the genus Sitophilus are known to cause serious losses of stored cereal grains throughout the world. Effective, cost-efficient grain weevil management could be accomplished by monitoring pest populations with pheromone-baited insect traps and applying control methods only when pest densities reach economic thresholds.
In 1984, Burkholder and coworkers isolated the male-produced aggregation pheromone of the rice weevil (Sitophilus oryzae L.) and of the maize weevil (Sitophilus zeamais M.), named it sitophilure, and identified it as (4R*,5S*)-5-hydroxy-4-methyl-3-heptanone (1) (Fig. 1)1. The syntheses of the four possible stereoisomers of sitophilure2 (1) and bioassays by Burkholder and coworkers revealed the (4S,5R) enantiomer as the active form of the pheromone3. Somewhat lower but still significant responses were observed for the (4SR,5RS) mixture while very low responses were elicited by either the (4R,5R)-isomer or the (4RS,5RS) racemic mixture. Since effective and cost-efficient control of both maize and rice weevils populations can be foreseen with the aid of the aggregation pheromone, several total syntheses of the racemic and the natural forms of sitophilure (1) have been published4,5.
Since chiral b-hydroxyesters are versatile and convenient building blocks for the syntheses of biologically important compounds, asymmetric reduction of b-ketoesters by baker's yeast (Saccharomyces cerevisiae) has been widely used due to its simplicity, low cost and no need for cofator regeneration. However, it should be emphasized that there are many substrates that afforded low chemical yields and/or low enantioselectivities, and access to both enantiomeric series of a chiral b-hydroxyester from the same prochiral substrate and microorganism is generally not possible. Much effort has been directed towards screening different microorganisms, modifying the substrate and the reaction conditions in order to improve the scope of biocatalyzed b-ketoesters reduction6.
The incomplete enantioselectivity observed is generally attributed to the existence of several operating oxidoreductases in the baker's yeast cells and in many cases the use of a purified reductase leads to high enantioselectivity7.
Nakamura and coworkers reported a quite useful method for the reduction of b-ketoesters with baker's yeast. The introduction of a third reagent into the reaction system changes the stereoselectivity of the reduction and allows the desired configuration to be obtained in good enantiomeric excess. Thus, the introduction of allyl alcohol or an a, b-unsaturated carbonyl compound shifts the stereoselectivity of the reduction toward the D isomer8, whereas the introduction of ethyl chloroacetate favors the formation of the L isomer (Scheme 1)9. The method is useful because the stereoselectivity can be easily controlled without screening microorganisms or modifying the structure of the subtrate.
We recently took advantage of Nakamura's methodology and developed an efficient preparation of (-)-serricornine, the sex pheromone of the cigarette beetle Lasioderma serricorne F., in 9 steps and 12% overall yield from methyl 3-oxopentanoate (2). The use of allyl alcohol as an enzymatic inhibitor allowed the preparation of (-)-3, in 88% yield and 76% enantiomeric excess10 which underwent stereoselective Fràter's alkylation11.
Mori and Ebata2 also reported the use of Fràter's alkylation of methyl (R)-2-hydroxypentanoate, prepared by oxidation of pentanoic acid with Candida rugosa, to synthesize the four possible stereoisomers of sitophilure (1), in 13-15 steps and 2.0-9.1% overall yield (natural form: 4.3% overall yield and 13 steps).
Here we report an enantioselective synthesis of (+)-sitophilure (1) which features the use of ethyl chloroacetate during the microbiological reduction of methyl 3-oxopentanoate with S. cerevisiae to control the stereochemical course of the baker's yeast reduction.
1H-NMR spectra were recorded in CDCl3 solution at 300 MHz and 13C-NMR spectra in CDCl3 solution at 75.5 MHz (unless otherwise noted) with a Varian Gemini 2000 or a Bruker AC-300P instrument. Chemical shifts are expressed in ppm relative to tetramethylsilane followed by multiplicity (s, singlet; d, doublet; t, triplet; q, quartet; qt, quintet; m, multiplet), coupling constant (Hz) and number of protons. Infrared spectra were recorded on a Perkin-Elmer 399B or 1600 series spectrophotometer. Optical rotations were measured at 25 °C in a Polamat A (Carl Zeiss) at 546 nm (mercury line) and corrected to 589 nm (sodium D line).
GC analyses were performed in a Hewlett-Packard 5890 series II chromatograph equipped with flame ionization detector, nitrogen as the carrier gas and capillary columns (30 m x 0.53 mm) with 1% phenylmethylsilicone (HP-1) or cross-linked polyethyleneglycol (Carbowax 20M) as stationary phases. Chiral GC analyses were performed with capillary columns (0.25 mm i.d, 25 m length) packed with heptakis-(2,6-methyl-3-pentyl)- b-cyclodextrine/OV-17 as stationary phase.
Column chromatography was performed using silicagel (70-230 Mesh), except when stated otherwise, and reactions were monitored by TLC (plates from Macherey-Nagel, Germany).
Baker's yeast employed was purchased from Sigma -Aldrich (YSC-2, type 2).
Tetrahydrofuran was treated with sodium/benzophenone and distilled immediately prior to use. Dichloromethane, triethylamine, diisopropylamine and benzene were treated with calcium hydride and distilled immediately prior to use. Oxalyl chloride and dimethyl sulfoxide were distilled prior to use. The remaining reagents employed were purchased from commercial suppliers and used without further purification. The reactions involving anhydrous solvents were carried out under argon atmosphere.
(+)-(S)-Methyl 3-hydroxypentanoate (3)
To a suspension of Sigma Aldrich dry baker's yeast (20 g) in water (60 mL) at 30 °C was added ethyl chloroacetate (0.43 mL, 4.0 mmol) and the whole mixture was stirred for 1 h at 30 °C. Methyl 3-oxopentanoate (2) (0.13 mL, 1.0 mmol) and glucose (20 g) were added and the mixture was stirred 1 day at 30 °C. Celite was added to the suspension and the mixture was filtered. The filtrate was extracted with Et2O (3 X 15 mL), the organic phase was washed with water (10 mL), brine (10 mL) and dried over MgSO4. After filtration, the solvent was evaporated under reduced pressure and the residue was purified by Kugelrohr distillation (70-80 °C, 1 mmHg) to afford 0.093 g (0.70 mmol) of (+)-3 (70% yield, 82% ee) as a colorless oil. 1H-NMR (CCl4, 300 MHz): d 0.96 (t, 3H, J = 7 Hz); 1.43-1.49 (m, 2H); 2.33 (dd, 1H, J = 16 and 8 Hz); 2.41 (dd, 1H, J = 16 and 4 Hz); 3.08 (br s, 1H); 3.67 (s, 3H); 3.81-3.84 (m, 1H). 13C-NMR (CCl4, 75.5 MHz): d 9.8; 29.3; 40.7; 51.0; 68.6; 172.4. IR (film): 3431; 1736 cm-1. [a]D +33.4 (c1.31, CHCl3); lit (-)-314: [a]D -36.9 (c1.31, CHCl3).
(2S,3S)-Methyl 3-hydroxy-2-methylpentanoate (4)
A solution of LDA was prepared by the dropwise addition of a 1.55 M solution of n-BuLi in hexane (15.0 mL, 23.3 mmol) to a stirred solution of iPr2NH (3.27 mL, 23.3 mmol) in THF (8 mL) at 0 °C under an argon atmosphere. The mixture was stirred 30 min at 0 °C and then cooled to -78 °C. A solution of (+)-3 (1.53 g, 11.6 mmol) in THF (5 mL) was added dropwise and the mixture was stirred 45 min at 0 °C. A solution of MeI (1.08 mL, 17.4 mmol) in DMPU (4.7 mL) was added dropwise to the solution at -40 °C. After stirring 45 min at this temperature, the reaction temperature was allowed to reach room temperature. The mixture was quenched with satd. aq. NH4Cl (7 mL) at 0 °C and extracted with Et2O (3 X 10 mL). The organic phase was washed with brine (10 mL), dried over MgSO4, filtered and concentrated to afford 1.19 g of a mixture of 4 and its C-2 epimer (8:1 ratio) which was used in the next step without further purification. 1H-NMR (CDCl3, 300 MHz): d 0.98 (t, 3H, J = 7 Hz); 1.20 (d, 3H, J = 7 Hz); 1.41-1.58 (m, 2H); 2.56 (quint, 1H, J = 7 Hz); 2.72 (br s, 1H); 3.58-3.67 (m, 1H); 3.71 (s, 3H). 13C-NMR (CDCl3, 75.5 MHz): d 9.7; 14.2; 27.4; 44.8; 51.7; 74.5; 176.4. IR (film): 3426; 1735 cm-1.
(-)-(2R,3S)-2-Methyl-1-O-tert-butyl-dimethylsilyl-1,3-pentanediol (6)
To a suspension of LiAlH4 (0.630 g, 16.3 mmol) in THF (20 mL) at 0 °C was added a solution of 4 (1.61 g, 11.0 mmol) in THF (8 mL). The reaction mixture was stirred overnight at room temperature, diluted with Et2O (20 mL) and successively treated at 0 °C with water (0.63 mL), 10% aqueous NaOH (0.63 mL) and water (1.88 mL). The inorganic solids were filtered and washed with Et2O (40 mL). The organic extracts were dried over MgSO4 and concentrated to afford (-)-5 (1.30 g) which was taken up in CH2Cl2 (12 mL) and treated with triethylamine (1.69 mL, 12.1 mmol), catalytic amount of N,N-dimethyl-4-aminopyridine (0.008 g, 0.07 mmol) and TBSCl (1.82 g, 12.1 mmol). The mixture was stirred 1 h at room temperature and poured into water. The layers were separated and the organic phase was washed with saturated NH4Cl solution (3 mL), brine (3 mL), dried over MgSO4 and concentrated. Silica gel chromatography (2% AcOEt in hexanes, v/v) of the crude product afforded (-)-6 (2.40 g, 10.3 mmol) in 89% overall yield from (+)-3, as a colorless oil. 1H-NMR (CDCl3, 300 MHz): d 0.08 (s, 6H); 0.84 (d, 3H, J = 7 Hz); 0.90 (s, 9H); 0.95 (t, 3H, J = 7 Hz); 1.36-1.50 (m, 1H); 1.50-1.65 (m, 1H); 1.65-1.78 (m, 1H); 3.41-3.51 (m, 1H); 3.59 (dd, 1H, J = 10 and 8 Hz); 3.79 (dd, 1H, J = 10 and 4 Hz); 3.84 (sl, 1H). 13C-NMR (CDCl3, 75.5 MHz): d -5.7; -5.6; 9.5; 13.6; 18.1; 25.8; 27.8; 39.0; 68.5; 77.9. IR (film): 3442, 1255, 1083 cm-1. [a]D -13.1 (c1.3, CHCl3).
(+)-(2R,3R)-2-Methyl-1-O-tert-butyl-dimethylsilyl-1,3-pentanediol (7)
To a solution of (-)-6 (0.517 g, 2.22 mmol), PPh3 (2.04 g, 7.77 mmol) and p-nitrobenzoic acid (1.29 g, 7.77 mmol) in benzene (9 mL) at 0 °C was added a solution of diethyl azodicarboxylate (1.22 mL, 7.77 mmol) in benzene (6 mL). The ice-bath was removed and the mixture was stirred overnight at room temperature. The solvent was removed in vacuo and purification by silica gel chromatography (5% AcOEt in hexanes, v/v) of the crude product afforded 0.69 g of the p-nitrobenzoate derivative which was dissolved in MeOH (20 mL) and treated with a solution of K2CO3 (1.73 g, 12.6 mmol) in water (5 mL). The mixture was stirred 15 h at room temperature, the solvent was removed and the crude mixture was diluted with Et2O (20 mL). The layers were separated and the aqueous phase was extracted with Et2O (3 x 5mL). The combined organic phases were washed with brine (5 mL), dried over MgSO4 and concentrated under reduced pressure. Silica gel chromatography (2% AcOEt in hexanes, v/v) of the crude product afforded (+)-7 (0.414 g, 1.78 mmol) as a colorless oil, in 80% yield. 1H-NMR (CDCl3, 300 MHz): d 0.07 (s, 6H); 0.90 (s, 9H); 0.92 (d, 3H, J = 7 Hz); 0.95 (t, 3H, J = 7 Hz); 1.32-1.61 (m, 2H); 1.66-1.79 (m, 1H); 3.05 (br s, 1H); 3.68 (dd, 1H, J = 10 Hz and 5 Hz); 3.65-3.79 (m, 1H); 3.76 (dd, 1H, J = 10 Hz and 4 Hz). 13C-NMR (CDCl3, 75.5 MHz): d -5.7; -5.6; 10.0; 10.6; 18.1; 25.8; 26.9; 38.3; 68.5; 76.4. IR (film): 3442, 1255, 1083 cm-1. [a]D +6.55 (c1.3, CHCl3).
(+)-(2R,3R)-2-Methyl-1,3-O-di-tert-butyl-dimethylsilyl-1,3-pentanediol (8)
To a solution of (+)-7 (0.334 g, 1.44 mmol) and 2,6-lutidine (0.34 mL, 2.9 mmol) in CH2Cl2 (6.5 mL) at 0 °C was added TBSOTf (0.58 mL, 2.2 mmol). The mixture was stirred 30 min at 0 °C and water (2 mL) was added. The layers were separated and the aqueous layer was extracted with CH2Cl2 (3 x 1 mL). The combined organic layers were washed with brine (2 mL), dried over MgSO4 and concentrated. Silica gel chromatography (5% AcOEt in hexanes, v/v) of the crude product afforded (+)-8 (0.468 g, 1.35 mmol) in 94% yield, as a colorless oil. 1H-NMR (CDCl3, 300 MHz): d 0.03 (s, 12H); 0.86 (s, 9H); 0.88 (s, 9H); 0.81 (d, 3H, J = 7 Hz); 0.86 (t, 3H, J = 7 Hz); 1.36-1.56 (m, 2H); 1.65-1.77 (m, 1H); 3.40 (dd, 1H, J = 10 and 7 Hz); 3.56 (dd, 1H, J = 10 and 6 Hz); 3.63-3.70 (m, 1H). 13C-NMR (CDCl3, 75.5 MHz): d -5.3; -4.7; -4.2; -2.9; 10.2; 10.4; 18.2; 18.3; 25.7; 25.9; 27.3; 39.5; 65.6; 73.5. IR (film): 1471, 1089, 1049 cm-1. [a]D +4.1 (c2.1, CHCl3).
(+)-(2R,3R)-3-O-tert-Butyl-dimethylsilyl-2-methyl-1,3-pentanediol (9)
To a solution of (+)-8 (0.398 g, 1.15 mmol) in THF (20 mL) in a Nalgene tube was added freshly prepared buffered pyridinium hydrofluoride (19.0 mL) (stock solution prepared from 2.0 g of Aldrich pyridinium hydrofluoride, 4.0 mL of pyridine and 16 mL of THF). After 3 h at room temperature, satd. aq. NaHCO3 (20 mL) was added. The layers were separated, the aqueous layer was extracted with Et2O (3 x 5 mL), the combined organic layers were washed with brine (7 mL), dried over MgSO4 and concentrated under reduced pressure. Silica gel chromatography (10% AcOEt in hexanes, v/v) afforded (+)-9 (0.220 g, 0.95 mmol) in 83% yield, as a colorless oil. 1H-NMR (CDCl3, 300 MHz): d -0.01 (s, 6H); 0.71 (d, 3H, J = 7 Hz); 0.80 (t, 3H, J = 7 Hz); 0.80 (s, 9H); 1.30-1.50 (m, 2H); 1.81-1.95 (m, 1H); 2.56 (br s, 1H); 3.38-3.48 (m, 1H); 3.51-3.66 (m, 2H). 13C-NMR (CDCl3, 75.5 MHz): d -4.5; -4.4; 10.8; 11.9; 18.0; 25.1; 25.8; 36.2; 66.1; 76.6. IR (film): 3355, 1253, 1049, 1022 cm-1. [a]D +6.65 (c1.3, CHCl3).
(3R,4R,5S)-5-O-tert-Butyl-dimethylsilyl-4-methyl-3,5-pentanediol (11) and (3R,4R,5R)-5-O-tert-Butyl-dimethylsilyl-4-methyl-3,5-pentanediol (12)
To a solution of oxalyl chloride (0.078 mL, 0.88 mmol) in CH2Cl2 (2.5 mL) at -78 °C was added dimethyl sulfoxide (0.12 mL, 1.8 mmol) dropwise. The solution was stirred 10 min at -78 °C and a solution of (+)-9 (0.103 g, 0.443 mmol) in CH2Cl2 (2.5 mL) was added. The mixture was stirred 1.5 h at -78 °C and then triethylamine (0.36 mL, 2.6 mmol) was added. The reaction mixture was allowed to warm to room temperature and quenched with water. The layers were separated, the aqueous layer was extracted with CH2Cl2 (3 x 2 mL), the combined organic layers were washed with brine (3 mL), dried over MgSO4 and concentrated to give the crude aldehyde. To a solution of the crude aldehyde (0.087 g, 0.38 mmol) in Et2O (6 mL) at 0 °C was added 1.0 M ethylmagnesium bromide solution in Et2O (0.76 mL, 0.76 mmol). The mixture was stirred 30 min at 0 °C and then aq. NH4Cl solution (1.5 mL) was added. The layers were separated and the aqueous layer was extracted with Et2O. The combined organic layers were dried over MgSO4 and concentrated. Silica gel chromatography (10% AcOEt in hexanes, v/v) of the crude product afforded a 5:1 mixture of diastereomeric alcohols 11 and 12 (0.091 g, 0.35 mmol) in 79% yield, as a colorless oil. An analytically pure sample of alcohol 11 was isolated and characterized. 1H-NMR (CDCl3, 300 MHz): d 0.09 (s, 6H); 0.77-0.95 (m, 9H); 0.90 (s, 9H); 1.40-1.62 (m, 5H); 2.87 (br s, 1H); 3.64 (ddd, 1H, J = 8, 6 and 2 Hz); 3.76 (ddd, 1H, J = 9, 6 and 3 Hz). 13C-NMR (CDCl3, 75.5 MHz): d -4.6; -3.7; 5.2; 9.8; 10.5; 18.0; 25.8; 27.5; 27.9; 38.2; 76.6; 79.3. IR (film): 3423, 1461, 1105, 1004 cm-1. [a]D -21.3 (c0.82, CHCl3).
(+)-(4S,5R)-5-Hydroxy-4-methyl-3-pentanone (1)
To a solution of oxalyl chloride (0.013 mL, 0.15 mmol) in CH2Cl2 (1.0 mL) at -78 °C was added dimethyl sulfoxide (0.020 mL, 0.31 mmol) dropwise. The solution was stirred 10 min at -78 °C and a solution of a mixture of 11 and 12 (0.023 g, 0.089 mmol) in CH2Cl2 (1.0 mL) was added. The mixture was stirred 1.5 h at -78 °C, and treated with triethylamine (0.06 mL, 0.46 mmol). After warming to room temperature, the reaction was quenched with water, the layers were separated and the aqueous layer was extracted with CH2Cl2 (3 x 2 mL). The combined organic phases were washed with brine (4 mL), dried over MgSO4 and concentrated under reduced pressure. The residue (0.019 g) was dissolved in THF (1 mL) at room temperature and treated with 1.0 M solution of TBAF (0.1 mL, 0.1 mmol) in THF. The mixture was stirred 1 day at room temperature, diluted with Et2O (10 mL) and treated with aq. NH4Cl (3 mL). The layers were separated and the aqueous layer was extracted with Et2O (3 x 4 mL). The combined organic layers were dried over MgSO4 and concentrated. Silica gel chromatography (30% AcOEt in hexanes, v/v) afforded (+)-1 (0.0074 g, 0.052 mmol) in 60% yield, as a colorless oil. 1H-NMR (CDCl3, 300 MHz): d 0.96 (t, 3H, J = 7 Hz); 1.06 (t, 3H, J = 7 Hz); 1.14 (d, 3H, J = 7 Hz); 1.37 (ddq, 1H, J = 15, 7 and 3 Hz); 1.51 (ddq, 1H, J = 15, 8 and 7 Hz); 2.42-2.70 (m, 3H); 2.86 (br s, 1H); 3.83 (ddd, 1H, J = 8, 5 and 3 Hz). 13C-NMR (CDCl3, 75.5 MHz): d 7.6; 9.9; 10.4; 26.8; 35.1; 49.3; 72.6; 216.8. IR (film): 3453; 1701; 1460 cm-1. [a]D +24.8 (c1.24, Et2O). lit.2: [a]D +27.0 (c1.24, Et2O).
The microbiological reduction of methyl and ethyl 3-oxopentanoate in the presence of ethyl chloroacetate, as described by Nakamura and coworkers9, afforded (+)-3 in good enantiomeric excess (Table 1). The nature of the alkoxy moiety (ethyl or methyl) does not significantly affect the enantiomeric excess of the reduction, whereas the use of only 2 equivalents of ethyl chloroacetate surprisingly leads to lower conversion. Having determined the optimal conditions for the reduction of b-ketoester, we were able to isolate gram quantities of (+)-3 in 70% yield and 82% ee, after purification by Kugelrohr distillation (1mmHg, 70-80 °C) when baker's yeast was previously inactivated at 30 °C for 30 min with 4 equivalents of ethyl chloroacetate.
The stereogenic center at C-4 (sitophilure numbering) was established after alkylation of the lithium dianion derived from (+) 3, according to Fràter conditions.10 A 8:1 mixture of (S,S)-3-hydroxy-2-methylpentanoate 4 and its C-2 epimer was obtained and the configuration of the major isomer was confirmed to be 2S,3S by analysis of its 1H-NMR spectrum which displayed a coupling constant (JH2-3 = 7.0 Hz) and a deshielding effect at C-2 and C-3 (27.4 and 74.5 ppm, respectively) in the 13C-NMR spectrum characteristic of its anti relative configuration12 (the same carbons in the minor component appeared at 26.7 and 73.2 ppm, respectively).
Attempts to gain direct access to hydroxy ester (+)-4 through the reduction of methyl 2-methyl-3-oxopentanoate with S. cerevisiae in order to simplify the synthetic scheme met with failure: esters of 2-methyl-3-oxopentanoic acid are slowly converted by S. cerevisiae to the corresponding hydroxyesters in low yields and very poor diastereoselection. At this point it seems that a more straightforward route to (+)-4 or even to (+)-1 requires microbial screening.
Reduction of (+)-4 with lithium aluminum hydride, selective monosilylation with TBSCl and separation of the diastereoisomers by silica gel chromatography gave (-)-6 in 89% overall yield from (+)-3. At this stage, we were ready to undertake the configuration inversion at C-5 (sitophilure numbering) required to convert (-)-6 to sitophilure (1). Mitsunobu inversion13 followed by basic hydrolysis gave (+)-7 in 80% yield. Silylation of (+)-7 with TBSOTf gave (+)-8 in 94% yield, which was monodeprotected selectively with HF-pyridine to afford (+)-9 in 83% yield. Swern oxidation of (+)-9 gave the unstable aldehyde 10 which was immediately treated with EtMgBr to give a diastereoisomeric mixture of alcohols 11 and 12 (4.5:1 syn:anti ratio) in 79% yield. Although the stereogenic center at C-3 (sitophilure numbering) would not be necessary in the desired pheromone, the above mixture was separated by silica gel chromatography, and the less polar and more abundant isomer 11, was fully purified and characterized.
The conversion of the aldehyde 10 to the diastereoisomeric mixture of alcohols 11 and 12 has been previously reported by Mori and Ebata2. The 1H- and 13C-NMR spectral data of our less polar isomer were in accord with the values reported by these authors for the syn isomer 11, but the value of the specific optical rotation of our less polar isomer was in accordance with the value reported by Mori and Ebata for the anti isomer 12 (Table 2). Since the data were divergent we decided to carry out an NMR analysis of our less polar isomer. After desilylation, its 1H- and 13C-NMR spectra revealed a symmetrical diol (only 5 signals in the 13C-NMR spectrum), fully confirming that our as well as Mori and Ebata's less polar and more abundant isomer displayed all syn stereochemistry as depicted in 11, and that the specific optical rotation of 11 and 12 were erroneously interchanged in Mori and Ebata's paper2.
Swern oxidation of the diastereoisomeric mixture of alcohols 11 and 12, followed by deprotection of the TBS group, gave (+)-sitophilure (1), in 60% yield. The 1H- and 13C-NMR spectral data and the optical rotation ([a]D+24.8 (c1.24, Et2O)), are in good agreement with those reported in the literature for (+)-1 by Mori and Ebata.2 The enantiomeric excess of (+)-1 was determined to be 82% after chiral GC analysis (heptakis-2,6-dimethyl-3-pentyl- b-cyclodextrine as stationary phase).
An efficient preparation (12 steps, 18% overall yield and 82% enantiomeric excess) of enantiomerically enriched (+)-sitophilure (1) was developed from methyl (S)-3-hydroxypentanoate, readily prepared by baker's yeast reduction of methyl 3-oxopentanoate.
The authors gratefully acknowledge the financial support from FINEP (Brazil), CNPq (Brazil) and IFS (Sweden).
1.a) Schmuff, N.R.; Phillips, J.K.; Burkholder, W.E.; Fales, H.M.; Chen, C.W.; Roller, P.P.; Ma, M. Tetrahedron Lett. 1984, 25, 1533. [ Links ]b) Phillips, J.K.; Walgenbach, C.A.; Klein, J.A.; Burkholder, W.E.; Schmuff, N.R.; Fales, H.M. J. Chem. Ecol. 1985, 11, 1263. [ Links ]
2.Mori, K.; Ebata, T. Tetrahedron 1986, 42, 4421. [ Links ]
3.Walgenbach, C.A.; Phillips, J.K.; Burkholder, W.E.; King, G.G.S.; Slessor, K.N.; Mori, K. J. Chem. Ecol. 1987, 13, 2159. [ Links ]
4.For racemic syntheses, see: a) Ref. 1. b) Sato, F.; Takeda, Y.; Uchiyama, H.; Kobayashi, Y. J. Chem. Soc. Chem. Commun. 1984, 1132. [ Links ]c) Pilli, R.A.; Murta, M.M.; Russowsky, D.; Boeckelmann, M.A. J. Braz. Chem. Soc. 1991, 2, 121. [ Links ]
5.For total syntheses of (+)-sitophilure, see: a) Ref. 2. b) Mori, K.; Yoshimura, T.; Sugai, T. Liebigs Ann. Chem. 1988, 899. [ Links ]c) Enders, D.; Lohray, B.B. Angew. Chem. Int. Ed. Engl. 1988, 27, 581. [ Links ]d) Corey, E.J.; Imwinkelried, R.; Pikul, S.; Xiang, Y.B. J. Am. Chem. Soc. 1989, 111, 5493. [ Links ]e) Razkin, J.; González, A.; Gil, P. Tetrahedron: Asymmetry 1986, 7, 3479. [ Links ]
6.a) Santaniello, E.; Ferraboschi, P.; Grisenti, P.; Manzocchi, A. Chem. Rev. 1992, 92, 1071. [ Links ]b) Gänzer, B.I. Chem. Rev. 1991, 91, 49. [ Links ]c) Servi, S. Synthesis 1990, 1. [ Links ]
7.Ema, T.; Sugiyama, Y.; Fukumoto, M.; Moriya, H.; Cui, J.-N.; Sakai, T.; Utaka, M. J. Org. Chem. 1998, 63, 4996, and references therein. [ Links ]
8.Nakamura, K.; Kawai, Y.; Oka, S.; Ohno, A. Bull. Chem. Soc. Jpn. 1989, 62, 875. [ Links ]
9.Nakamura, K.; Kawai, Y.; Ohno, A. Tetrahedron Lett. 1990, 31, 267. [ Links ]
10.Pilli, R.A.; Riatto, V.B. J. Braz. Chem. Soc. 1998, 9, 571. [ Links ]
11.Fràter, G. Helv. Chim. Acta 1979, 62, 2829. [ Links ]
12.Heathcock, C.H.; Pirrung, M.C.; Sohn, J. J. Org. Chem. 1979, 44, 4294. [ Links ]
13.Mitsunobu, O. Shynthesis 1981, 1. [ Links ]
14.Mori, K.; Watanabe, H. Tetrahedron 1985, 41, 3421. [ Links ]
FAPESP helped in meeting the publication costs of this article
*e-mail: pilli@iqm.unicamp.br and vbriatto@iqm.unicamp.br
Instituto de Química - UNICAMP
13083-970 Campinas SP - Brazil
Tel./FAX.: +55 19 3521-3151
office@jbcs.sbq.org.br


text:
Gone Cold: Michael Carr, fatally injured in 1975
Special to the Register
WHO: Michael Edward Carr
DIED: Jan. 2, 1976
This is a weekly feature highlighting some of Iowa's unsolved homicides in the hopes that it will lead to new tips and potentially help solve cases. The project is a partnership between this newspaper and other members of the Iowa Newspaper Association.
At approximately 10 p.m. Dec. 26, 1975, Michael Edward Carr was struck by a vehicle on the west edge of Estherville, while walking home. He died one week later.
The hit-and-run happened near the intersection of Iowa Highway 9 and Emmet County blacktop A-22. A local couple found Carr on the road's eastbound side, his arms folded across his chest like a body in a coffin, and with his head resting on the curb. The Emmet County sheriff said Carr had been positioned there, leading officials to believe that whoever hit Carr most likely knew him. Carr's body sustained numerous bruises in the hit-and-run after being struck by the vehicle's bumper, the windshield and the top of the car. A maroon vehicle may have been involved.
Carr, who worked for the catalogue merchandiser "Ardan's" in Des Moines, had spent the evening with a friend at the "Filling Station" bar in Estherville.
Following Carr's death, his family received two anonymous letters, which they handed over to police. The family knew one letter had come from a girl Carr may have dated; the family described the other letter's contents as "strange."
If you have any information about Michael Carr's unsolved homicide, please contact the Estherville Police Department at 712-362-6084, the Emmet County Sheriff's Office at 712-362-2639 or the Iowa DCI at 515-725-6010 or email dciinfo@dps.state.ia.us.
Cold Case breakdown
LOCATION: Estherville
How you can help: If you have any information about Michael Carr's unsolved homicide, please contact the Estherville Police Department at 712-362-6084, the Emmet County Sheriff's Office at 712-362-2639 or the Iowa DCI at 515-725-6010 or email dciinfo@dps.state.ia.us.
MORE: Read more stories in our series, explore the database and watch videos on Iowa's unsolved murders, at DesMoinesRegister.com/GoneCold
DATABASE: Explore an interactive map of Iowa's unsolved murders, dating back to 1847, and learn more about each case from information gathered by Iowa Cold Cases
ABOUT THE PROJECT: Gone Cold: Getting away with murder