ea

Sullivan: County leads with many of Iowa’s ‘firsts’

I grew up on a Heritage farm (150 years in the same family) near Sutliff, and attended K-12 in the Lisbon school system. I am an alumnus of the University of Iowa. I have held several positions in the field of human services, including six years with the Department of Human Services and six years as executive director of the Arc of Johnson County.

I am married to Dr. Melissa Fath, a research scientist at the University of Iowa and a volunteer pharmacist at the Free Medical Clinic. We have three adult children — Rachel, Jordan and BJ, and have served as foster parents for another 50+ children.

I am a member of several community organizations, including: St. Andrew Presbyterian Church, Iowa Foster & Adoptive Parent Association, NAMI, Center for Worker Justice, ACLU Hawkeye Chapter, AFT Local 716, and Iowa City Federation of Labor. I also served four years as chairman of the Johnson County Democratic Party.

Some of the accomplishments of which I am proud:

• Leadership during the COVID-19 crisis.

• Leadership during 2008 floods.

• Raising the minimum wage — the first county in Iowa to do so.

• Passed a Human Rights Ordinance — the first county in Iowa to do so.

• Passed a Sensitive Areas Ordinance — the first county in Iowa to do so.

• Passed the Conservation Bond Initiative — the first county in Iowa to do so.

• Passed the Community ID Program — the first county in Iowa to do so.

• Started 1105 Project with gift of old Public Health building.

• Saved Sutliff Bridge after 2008 floods.

• Started trails funding.

• Created the Free Tax Help project.

• Created the Livable Community for Successful Aging.

• Added outdoor warning sirens to unincorporated Johnson County.

• Created the Local Foods Policy Council.

• Heritage AAA Outstanding Elected Official — 2009.

If reelected, my goals are:

1. Continue community recovery from COVID-19;

2. Begin serving people at the GuideLink Center;

3. Improve affirmative action results;

4. Renegotiate six union contracts to the benefit of all.

I am grateful for your past support, and I thank you for your future consideration. I promise to never take this position for granted! I respectfully request your vote on or before June 2.

Rod Sullivan is a candidate in the Democratic primary for Johnson County Board of Supervisors.




ea

Big oil overreaches on COVID-19 bailout

Like everyone, U.S. oil companies have been hit hard by the pandemic, and they are looking for relief. . Oil companies have requested special access to a $600 billion lending facility at the Federal Reserve, and the administration seems keen to deliver. The president just announced that the Secretary of Energy and Secretary of the Treasury would make funds available, and the Department of Energy is also floating a $7 billion plan to pay drillers to leave oil in the ground.

Unfortunately, at least one faction of the industry — a group of refiners that traditionally profit when crude feedstocks are cheap — is angling for much more than a financial bailout. They are using the pandemic as cover to cannibalize markets vital to U.S. biofuel producers and farmers.

Their plan, outlined in letter from several oil-patch governors, would require the Environmental Protection Agency (EPA) to halt enforcement of the Renewable Fuel Standard (RFS). It would allow refiners to stop offering biofuel blends at the fuel pump, eliminating the market for U.S. ethanol and biodiesel and decimating demand for billions of bushels of corn and soybeans used to make renewable motor fuel.

With half the nation’s 200-plus biofuel plants already offline, thousands of rural workers facing layoffs, and millions of U.S. farmers on financial life support, the destruction of the RFS would be an economic death knell for rural America.

It’s hard to imagine why refiners would expect the Trump administration to take the request seriously. The misguided plan would inflict incredible collateral damage on our economy, our energy security, and to the President’s prospects with rural voters. Notably, the courts rejected similar abuse in 2016. Even former EPA Administrator Scott Pruitt, who scorned American farmers, rejected a similar plan back in 2017.

Nevertheless, refiners saw the current health crisis as a political opportunity and went for a kill. Fortunately, farm state champions are pushing back. Governors from Kansas, Iowa, Nebraska, South Dakota and Minnesota condemned the oil-backed plan. They wrote, “Using this global pandemic as an excuse to undercut the RFS is not just illegal; it would also sever the economic lifeline that renewable fuels provide for farmers, workers and rural communities across the Midwest.”

Aside from the sheer audacity, the refinery-backed plan also suffers from a major flaw — it wouldn’t change the economic situation of a single refinery. They claim that lifting the RFS would eliminate the costs associated with biofuel credits known as RINs, which are used to demonstrate compliance with the nation’s biofuel targets. Refiners that refuse to produce biofuel blends can purchase RINs from those that blend more ethanol or biodiesel into the fuel mix. In turn, when they sell a gallon of fuel, that RIN price is reflected in their returns. The oil industry’s own reports show that “there is no economic harm to RIN purchasers, even if RIN prices are high, because those costs are recouped in the gasoline blend stock and diesel.”

Even in a fictional scenario where costs aren’t automatically recouped, a detailed EPA analysis found that “all obligated parties, including the small refiners subject to the RFS program, would be affected at less than 1 percent of their sales (i.e., the estimated costs of compliance with the rule would be less than 1 percent of their sales) even when we did not consider their potential to recover RIN costs — with the estimated cost-to-sales percentages ranging from -0.04 percent (a cost savings) to 0.006 percent.”

Clearly, a 0.006 percent savings isn’t going to protect any refinery jobs, but refineries are betting that DC policymakers don’t know the difference between RINs values and compliance costs. They open one side of a ledger and hope that no one asks to see the next page.

Meanwhile, the nation’s biggest oil lobby, American Petroleum Institute, is calling on the EPA to simply cut 770 million gallons of biofuel out of the 2020 targets. Earlier this year, regulators approved a modest bump in biofuels to addresses a small fraction of the four billion gallons lost to secretive EPA refinery exemptions. The courts have since sided against the handouts, but the EPA has refused to implement the decision. Now, API says the agency should rip away the few gallons clawed back by U.S. farmers. It’s a baseless argument with one goal: blocking competition at the fuel pump.

Keep in mind, collapsing demand for motor fuel is just as hard on the nation’s biofuel producers. RFS targets enforced by the EPA are based on a percentage of each gallon sold — so if refiners make less fuel, their obligations under the law shrink at an equal rate. Meanwhile, biofuel producers across the heartland are closing their doors, as even their modest 10 percent share of the market has been cut in half.

Biofuel advocates are focused on their own survival. Iowa Sen. Chuck Grassley summed it up, saying “[T]here ought to be parity for all liquid fuels. So I look forward to working with (Agriculture) Secretary (Sonny) Perdue to make sure that our biofuels industry gets through this crisis so that we can continue to use America’s (home) grown energy in our gas tanks.”

Parity makes sense, but refinery lobbyists want more. The Trump EPA should reject the latest anti-biofuel pitch because it’s bad policy, but more than that, it’s an insulting attempt to capitalize on a health crisis to make an end run around the truth.

Former Missouri Sen. Jim Talent spearheaded the Renewable Fuel Standard in 2005. He currently serves as co-chair of Americans for Energy Security and Innovation.




ea

Iowa workers beware, neither Big Debt Chet nor COVID-19 can stop unleashed prosperity

Chet Culver really should have known better.

Iowa’s former Democratic governor wrote a letter to current Republican Gov. Kim Reynolds decrying her administration’s declaration that workers who refuse to return to jobs amid COVID-19 fears would be denied unemployment benefits. He was among many who questioned whether Reynolds’ policy is even lawful, considering that unemployment rules allow Iowans to claim benefits for unsafe, intolerable or detrimental working conditions.

“Any such ill-conceived scheme that deprives them of choice and forces those hardworking, yet vulnerable, employees to report to unsafe workplace environments, while the positive incidences of COVID-19 infection are on the rise, is not merely penny-wise and pound-foolish — it is just plain wrong,” Culver argued.

But Culver should have known any overture for the rights of workers during the pandemic would fall on deaf ears. We learned Tuesday that more than 1,600 workers at four meatpacking plants tested positive for the virus. Reynolds continues insisting companies such as Tyson, with more than 1,300 cases at three facilities, are doing all they can to protect workers. In one Tyson facility at Perry, 58 percent of its employees contracted the virus.

Culver lost in 2010 to the Branstad-Reynolds ticket, a team that would go on to gut collective bargaining for public employees and make it far more difficult for injured workers to get compensation, among other greatest hits composed by its big business allies.

And Culver was bounced from office after issuing bonded debt to help Iowa communities, including Cedar Rapids, recover from natural disasters of 2008. Republicans dubbed him “Big Debt Chet” and decried his mismanagement of a crisis.

Strong management, apparently, is Reynolds’ decision to partially reopen 77 counties even as COVID-19 case numbers grow and deaths mount, and before ramped up testing and modeling provide critical information on the scope of the virus.

On Monday Reynolds received a lofty “A” grade from FreedomWorks and the Committee to Unleash Prosperity. Reynolds appeared on a conference call sponsored by the groups to talk about her strategy for reopening Iowa.

FreedomWorks and the Committee to Unleash Prosperity are conservative groups playing a key role in organizing “liberation” protests in Wisconsin, Oklahoma and elsewhere. FreedomWorks, with roots in the Tea Party movement, has been mobilizing local protesters and organizing events, according to The New York Times. It’s also conducting tracking polls in swing congressional districts and sharing data with presidential advisers and congressional staff.

“This isn’t political, and it shouldn’t be for anybody,” Reynolds told reporters this week when asked about her virus response.

FreedomWorks is among 24 groups who sent a letter to the president in April urging him to waive the Renewable Fuel Standard for the rest of the year due to pandemic concerns, potentially freeing Iowa farmers from more of their already scarce income.

So step aside Big Debt Chet. We’re unleashing prosperity. Even if workers get trampled.

(319) 398-8262; todd.dorman@thegazette.com




ea

Governor preaches ‘personal responsibility.’ But for whom?

Another day, another devastating new uptick in Iowa’s COVID-19 figures.

Several times in the past few weeks, Gov. Kim Reynolds has announced a new daily high in Iowa’s positive COVID-19 tests or deaths. On Tuesday, yet another striking record — 19 deaths in a 24-hour period, or nearly 10 percent of the state’s total COVID-19 deaths to date.

For a governor who says she is staking her pandemic response on data and metrics, those grim numbers don’t seem to weigh heavily on Reynolds’ decision-making.

“The fact is we can’t prevent people from getting the COVID-19 virus,” Reynolds said at her Tuesday news conference. “If we weren’t testing in these areas, people would still have the virus and without being tested, diagnosed and isolated it could spread even further.”

In one breath, Reynolds tells Iowans we are helpless to stop the virus’s spread. In the very next breath, she explains how testing and isolation can help prevent the spread.

It’s just one example of the confusing guidance Iowans are getting from the governor and her team. Iowans looking for answers about how to protect themselves and their families are finding seemingly conflicting answers.

They report we have reached the peak, only to backtrack. They say we’re in this together and there’s a statewide plan to confront the outbreak, but then they tell us it’s really about “personal responsibility.” They tell us to stay home as much as possible, then pivot to emphasizing the need for people who feel sick to stay home.

Sometimes, it almost feels as if Reynolds is blaming Iowans for getting sick.

Early on, Reynolds used a regional strategy to track the virus, based on factors such as hospitalizations and health care resources in six multicounty regions across the state. That approach has been brushed aside with little explanation to the public.

Instead, Iowa now has “open” and “closed” counties — 22 where significant restrictions remain intact, and 77 where businesses can open in a limited manner. After less than a week under the county-by-county strategy, there are early signs that the 77 counties are seeing an uptick in confirmed COVID-19 cases.

Gov. Reynolds is disrupting her own virus response plan

Reynolds’ response in this phase of the pandemic is just as crucial as the initial phase, to prevent a deadlier wave. Shifting to the personal responsibility path also decentralizes leadership, which creates more uncertainty.

If Iowa’s “open” counties see a surge, will Reynolds relent and reimpose restrictions?

We have reason to doubt it. Just this week, Reynolds co-authored a Washington Post guest column with other governors, arguing “our approach worked.”

In Reynolds’ mind, she has already defeated the virus, so she’s retreating from the fight. That’s bad news for Iowans who are still very much on the front lines of this pandemic.

(319) 398-8262; editorial@thegazette.com




ea

Bohannan: Bring new ideas and energy to House District 85

The upcoming primary election is a pivotal moment for Iowa City. For the past several months, I have talked to people throughout the district who are ready for change. They believe their Democratic representative should show up for people throughout the community, especially those in need. They expect a legislator from Iowa’s bluest district to be a leader in the party, raising money to support Democratic candidates up and down the ticket and making the strongest possible case for progressive legislation. They are ready to start now in building the future of the Democratic Party and state government in Iowa. And I am honored that they are putting their trust in me.

There is a lot at stake in this election. The coronavirus has laid bare and magnified preexisting inequities — inequities brought about by the Legislature’s disinvestment in education, health care, and worker rights and safety. Small businesses are now struggling to survive, when for years the state has been giving large corporations hundreds of millions of dollars in tax credits. Water quality, climate change and gun violence still need our attention, even as we continue to invest in keeping people safe from COVID-19. We have never needed strong leadership more than we do now.

I will be a champion for progressive values because I have lived them. I know how hard it can be for people to get by even when they work hard. I grew up in a trailer in rural Florida. Neither of my parents graduated high school. My dad was a construction worker who suffered for years with emphysema. When his health insurance was canceled, my family had to choose between paying for his medicine and everything else. Fortunately, public education gave me the opportunity for a better life. My teachers taught me well and helped me to apply to college. Public university tuition was affordable then, and I was able to work my way through engineering school and law school.

Today, I am a law professor, an environmental engineer and a mother. I believe I have the skills, energy and passion that Iowa City needs at this critical point in time. I will show up for every member of our community and fight for a better future for all of Iowa.

It’s time for change in Iowa City. Please vote for me in House District 85 and help to build the future that Iowa deserves.

Christina Bohannan is a candidate in the Democratic primary for Iowa House District 85.




ea

Lensing: Leadership on education funding, mental health and accessible voting

Serving as state representative of House District 85 for the past few years has been a privilege and an honor. I have worked hard to stand for the people of my district fighting for issues that are important to them and to the voters of Iowa City. I want to continue that advocacy and am running for another term in the Iowa House and ask for your vote.

I vigorously support adequate funding for education from pre-school to our community colleges and universities. Our young people are Iowa’s future and deserve the best start available through our excellent education system in Iowa. But we need to provide the dollars necessary to keep our teachers in the classroom so our children are prepared for whatever may lie ahead of them.

I have advocated for the fair treatment of workers in Iowa and support their right to organize. I have worked on laws for equal pay for equal work and whistle blower protection.

I am for essential funding for mental health services for Iowans of all ages. Children and adults who are struggling with mental health issues should have services available to them no matter where they live in this state.

I have fought to keep government open and accessible to Iowans. I support open records and open meetings laws to ensure that availability and transparency to all Iowans.

Keeping voting easy and accessible to voters has been a priority of mine. I support a fair and balanced redistricting system for voting in Iowa.

I have advocated to keep the bottle deposit law in place and expand it to cover the many new types of containers available.

I have worked on oversight legislation after several investigations into defrauding government which involved boarding homes, government agencies and pharmacy benefit managers (the “middleman” between pharmacies/Medicaid and the healthcare insurance companies.)

I cannot avoid mentioning the challenge of the coronavirus in Iowa. It has impacted our health, jobs, families and businesses. No one could have predicted this pandemic but as Iowans, we need to do our best to limit contact and the spread of this disease. My sincere appreciation goes to those workers on the frontlines of this crisis: the healthcare workers, store owners, businesses, farmers, teachers and workers who show up every day to keep this state moving forward. Thank you all!

There is still much work to be done to keep Iowa the great place where we live, work and raise our families. I am asking for your vote to allow me the privilege of continuing that work.

Vicki Lensing is a candidate in the Democratic primary for Iowa House District 85.




ea

Iowa’s DHS team deserves our thanks

Right now, there are so many things that are hard to believe. It’s hard to believe we’re in the midst of a global pandemic. It’s hard to believe how much things have changed how incredibly quickly. It’s hard to believe I’ve only been the Iowa Department of Human Services director for six months. What is not hard to believe is how our team at DHS has stepped up during this public health emergency. In my short time in the great state of Iowa, I have seen our team do incredible things. In honor of Public Service Recognition Week, I want to take a moment to talk about #TeamDHS and their unwavering dedication to those we serve.

The DHS mission is to help Iowans achieve healthy, safe, stable, and self-sufficient lives through the programs and services we provide. To accomplish this mission in typical times, our team wakes up every day to do difficult work. Our front-line staff often work holidays, evenings and weekends, sacrificing time with their own families to serve others. Our team members hear difficult stories, make tough decisions and assist families when they are at their most vulnerable. Their jobs are tough under normal circumstances — navigating a global pandemic has challenged everything we do, but the work has not stopped, because the work cannot stop. Iowans need us now more than ever.

COVID-19 impacts the way social workers support families. It impacts the way facilities support and protect the individuals we serve. It impacts the mental health of countless Iowans. It impacts the needs of Medicaid members and Iowans receiving other assistance.

As an agency impacted from top to bottom, I’m proud to share our collective response effort. The Medicaid and Adult, Children and Family Services (ACFS) teams kicked into high gear and set forth waivers that will truly help those most in need; ensuring access to medical care, food and economic assistance. Our income maintenance workers stand ready to assist those families who have questions or find themselves now in need of supports.

DHS went from an agency with no telecommute policy, to deploying more than 2,000 people to work from home. Our IT team stepped in to help disassemble and lift computers for those team members who couldn’t. Our fiscal team shifted paper approval processes to electronic streamlined processes to assist our new telecommute capabilities and continues to source supplies to meet our entire system’s personal protective equipment (PPE) need. We’ve even been able to help some of our partners out in the community obtain PPE. And many, many team members have stepped into new roles when asked because there was a need.

If this isn’t teamwork, I don’t know what is.

Many of our staff continue their work on the front line every day, despite these uncertain and unprecedented times. I know for many of them it is challenging, and our work and our lives are changing in ways we would never have imagined just weeks ago. We know there is more to come, and our response effort must pivot on a dime. So, to my team, thank you for stepping up and leaning in. And to my fellow Iowans, I ask you join me in thanking them, and all of our public servants and essential workforce during Public Service Recognition Week.

Public Service Recognition Week (PSRW) is May 3-9, celebrated the first week of May since 1985 (beginning on the first Sunday of the month) to honor the men and women who serve our nation as federal, state, county and local government employees.

We’re asking individuals whose lives have been positively impacted by one of our team members, to reach out to them directly with an email or video message to thank them. Whether it’s a case worker, social worker, income maintenance worker or direct care staff, now more than ever they deserve to hear how they’re improving the lives of Iowans.

We’re hoping we can count on you to get the word out and support our public servants. Notes directly to DHS team members are a really impactful way to personally show gratitude. This week we’ll also be encouraging people to thank those in public service using the hashtags #PSRW and #TeamDHS. Stay tuned to our social media to see how you can help celebrate our public servants.

The bravery, grace, and sacrifice our team shows every day is what true public service looks like. From one very proud DHS team member to her more than 4,100 colleagues — thank you. Public service is indeed a noble calling.

Kelly Garcia is the director of the Iowa Department of Human Services.




ea

Why universal basic health care is both a moral and economic imperative

Several hundred cars were parked outside a food bank in San Antonio on Good Friday — the food bank fed 10,000 people that day. Such scenes, increasingly common across the nation and evocative of loaves and fish, reflect the cruel facts about the wealthiest nation in the world: 80 percent of Americans live paycheck to paycheck, and 100 percent of Americans were unprepared for the COVID-19 pandemic. People are hungry due to macroeconomic and environmental factors, not because they did something wrong. Although everyone is at risk in this pandemic, the risk is not shared equally across socioeconomic classes. Universal basic health care could resolve this disparity and many of the moral and economic aspects associated with the pandemic.

Increases in the total output of the economy, or the gross domestic product (GDP), disproportionately benefit the wealthy. From 1980 to 2020, the GDP increased by 79 percent. Over that same time, the after-tax income of the top 0.01 percent of earners increased by 420 percent, while the after-tax income of the middle 40 percent of earners increased by only 50 percent, and by a measly 20 percent for the bottom 50 percent of earners. At present, the top 0.1 percent of earners have the same total net worth as the bottom 85 percent. Such income inequality produces poverty, which is much more common in the U.S. than in other developed countries. Currently 43 million Americans, or 12.7 percent of the population, live in poverty.

At the same time, 30 million Americans are uninsured and many more are underinsured with poorly designed insurance plans. The estimated total of uninsured and underinsured Americans exceeds 80 million. In addition, most of the 600,000 homeless people and 11 million immigrants in the U.S. lack health care coverage. Immigrants represent an especially vulnerable population, since many do not speak English and cannot report hazardous or unsafe work conditions. Furthermore, many immigrants avoid care due to fear of deportation even if they entered the country through legal channels.

Most people in poverty and many in the middle class obtain coverage from federal programs. On a national level, Medicaid is effectively a middle-class program and covers those living in poverty, 30 percent of adults and 60 percent of children with disabilities as well as about 67 percent of people in nursing homes. In Iowa, 37 percent of children and 48 percent of nursing home residents use Medicaid. Medicaid also finances up to 20 percent of the care provided in rural hospitals. Medicare, Medicaid and the Children’s Hospital Insurance Program (CHIP) together cover over 40 percent of Americans.

In addition to facilitating care, health care policy must also address the “social determinants of health,” since the conditions in which people live, work, and play dictate up to 80 percent of their health risks and outcomes. This means that health care reform requires programs in all facets of society. Winston Churchill first conceptualized such an idea in the early 20th century as a tool to prevent the expansion of socialism, arguing that inequality could persist indefinitely without social safety nets. Since that time most developed countries have implemented such social programs, but not the US.

All developed countries except the U.S. provide some type of universal basic health care for their residents. Universal basic health care refers to a system that provides all people with certain essential benefits, such as emergency services (including maternity), inpatient hospital and physician care, outpatient services, laboratory and radiology services, treatment of mental illness and substance abuse, preventive health services (including vaccinations), rehabilitation, and medications. Providing access to these benefits, along with primary care, dramatically improves the health of the community without imposing concerns regarding payment. Perhaps not coincidentally, the U.S. reports a lower life expectancy and higher rates of infant mortality, suicide and homicide compared to other developed countries.

Countries such as Canada, Great Britain, Denmark, Germany, Switzerland, Australia, and Japan all produce better health care outcomes than the U.S. at a much lower cost. In fact the U.S. spends about twice the percentage of its GDP on health care compared to these countries. With that being said, the Affordable Care Act of 2010 (ACA), which facilitated a decrease in the rate of the uninsured in the U.S. from 20 percent to 12 percent, also decreased the percentage of the GDP spent on health care from 20.2 percent to 17.9 percent in just 10 years. For this reason, most economists agree that universal basic health care would not cost more than the current system, and many would also argue that the total costs of the health care system cannot be further reduced unless everyone has access to basic care.

Achieving successful universal basic health care requires a serious long-term commitment from the federal government — contributing to Medicaid and financing its expansion are not enough. It requires courage from our elected leaders. The ACA took several important steps toward this goal by guaranteeing coverage for preexisting conditions, banishing lifetime maximums for essential services, and mandating individual coverage for everyone, though Congress repealed this final provision in 2017. At present, the ACA requires refinement and a public option, thereby preserving private and employer-based plans for those who want them.

Without universal basic health care the people living at the margins of society have no assurances that they will have access to basic health care services, especially during times of pandemic. Access to food and medications is less reliable, large families live together in small spaces, and public transportation facilitates frequent exposure to others. Childhood diseases such as asthma, chronic diseases such as diabetes, and diseases related to smoking such as COPD and cancer are all likely to worsen. Quarantine protocols also exacerbate the mental health crisis, further increasing rates of domestic violence, child abuse, substance abuse, depression, and suicide. In the last six weeks over 30 million Americans have applied for unemployment benefits, and as people become unemployed, many will lose health insurance.

Access to basic health care without economic or legal consequences would greatly enhance all aspects of pandemic management and response, from tracing contacts and quarantining carriers to administering tests and reinforcing supply chains. The COVID-19 pandemic has disproportionately affected minorities and the impoverished in both mortality and livelihood. Universal basic health care helps these vulnerable populations the most, and by reducing their risk it reduces the risk for everyone. In this way, universal basic health care supports the best interests of all Americans.

Like a living wage, universal basic health care aligns with the Christian tradition of social justice and is a moral and economic imperative for all Americans. Nurses, doctors, and other health care providers often observe a sharp contrast between the haves and have-nots when seeing patients. The homeless, the hungry, the unemployed, the working poor, the uninsured; people without families, patients with no visitors, those who live alone or lack support systems; refugees and immigrants — all of these people deserve the fairness and dignity provided by universal basic health care and programs which improve the social determinants of their health. The ACA moved U.S. toward this goal, but now it requires refinement and a public option. The COVID-19 pandemic highlights the urgency of this imperative by demonstrating how universal basic health care could decrease the risks to those less fortunate, thus significantly decreasing the risks to everyone.

James M. Levett, MD, serves on the board of Linn County Public Health and is a practicing cardiothoracic surgeon with Physicians’ Clinic of Iowa. Pramod Dwivedi, MS, DrPH (c), is the health director of Linn County Public Health.




ea

‘Death stalked swiftly’ in 1918. What will we remember now?

In August 1919, the Cedar Rapids Evening Gazette opined in favor of the passage of a $5 million congressional appropriation to “investigate influenza, its cause, prevention and cure.”

“We all remember without effort the darkness and terror which engulfed the land last fall and winter as death stalked swiftly from seaboard to seaboard, into crowded city and unto lonely plain, sparing not the cottage of the poor nor the mansion of the rich,” the editorial said. “In four short months, influenza claimed a half million lives and pressed millions of others onto beds of sickness, suffering and helplessness. The nation’s mortality rate leapt high and with astounding speed. The nation was unprepared to cope with a disease calamity such as it has never known.”

The Gazette lamented that billions of dollars in loss were wrought by the pandemic of so-called Spanish influenza, compared with only $5 million being spent to investigate the virus.

“More has been spent in studying diseases of hogs,” the editorial argued.

Just less than a year earlier, The Evening Gazette did not see “darkness and terror” coming. A front page, above-the-fold story Sept. 25, 1918, asked: “Spanish Influenza just the old-fashioned grippe?” “Grippe” is an old-time term for the flu, by the way.

“As a matter of fact, in the opinion of City Physician Beardsley, and a good many other Cedar Rapids men in the same profession, Spanish influenza is just another name for the regular old fashioned influenza and is no different from the influenza we have always had. A bad cold is a bad cold, and a worse cold is grippe, which covers a multitude of things ...,” The Gazette reported, optimistically.

An earlier strain of influenza in the spring of 1918 had been less virulent and deadly. But the second wave was no ordinary grippe.

By mid-October, according to reports in The Evening Gazette, influenza caseloads exploded. On Oct. 12, 1918, the local health board shut down pool rooms, billiard halls and bowling alleys. It pleaded with store owners to avoid allowing crowds to linger. On Oct. 16, stores were ordered to discontinue any special sales that might draw more shoppers.

Restrictions tightened as the pandemic worsened.

Death notices were stacking up on Gazette pages, in rows reminiscent of small tombstones. Many victims were cut down in the prime of life by a virus that struck young, healthy people hardest. Mothers and fathers died, leaving young children. Soldiers serving in World War I died far away from home. Visitors to town never returned home.

Young brothers died and were mourned at a double funeral. A sister who came to care for a sick brother died, and so did her brother.

Ray Franklin Minburn, 24, died of influenza, leaving behind six sisters and two brothers. “Mr. Minburn was a faithful son, a devoted companion, a good neighbor,” concluded his death announcement on Oct. 21, 1918.

On the same page that day came news, tucked among the tombstones, reporting that Iowa Gov. William Harding had recovered from influenza, in the midst of his reelection campaign, and was back in the office. You might remember Harding as the governor who banned German and other languages during World War I and who was nearly impeached for bribery in 1919.

Not far from Harding’s update came news from the prison in Anamosa that “whisky and quinine” were being deployed to attack the grippe.

The pages of The Evening Gazette also were dotted with advertisements for supposed cures and treatments.

“Danger of infection from influenza or any contagious disease can be eliminated by using preventive measures,” prescribed by Ruby S. Thompson, chiropractor and naturopathic physician. Those included “Sulphur-vapor baths, Carlsbad mineral bath.”

You could build up your blood using “Gude’s Pepto-Mangan,” the “Red Blood Builder.” Keep your strength up with Horlick’s Malted Milk.

One ad looked exactly like a news story, carrying the bold headline “Druggists still asked to conserve stocks of VapoRub needed in ‘flu’ districts.” In a tiny notation at the end of the “story” were the words “The Vicks Chemical Co.”

That August 1919 Gazette editorial I mentioned makes me wonder what we’ll be writing in a year or so after our current pandemic.

Death stalking us swiftly from seaboard to seaboard in an unprepared nation, preceded by the casual insistence it’s no worse than the seasonal flu, sounds eerily familiar in 2020. More attention is being paid to hogs than the health of humans working in meatpacking plants.

Will we be writing in 2021 how reopening states and counties too soon led to our own second wave? Here in Iowa, reopening began before we had a fully working predictive model to chart the pandemic’s course and before new testing efforts had a chance to ramp up. Will decisions made without crucial information look smart in 2021? Or will we wish we’d waited just a couple more weeks?

What of the protesters demanding liberation? What about the president, running for reelection in a nation harmed by his crisis mismanagement? What will a new normal look like?

Will there be newspapers around to editorialize in the aftermath? After all, most of the pitches for fake cures are online now, some even extolled at White House briefings.

And will we be better prepared next time? I bet editorial writers in 1919 figured we’d have this pandemic response thing down to a science by now.

Little did they know that in 2020 we’d have so little respect for science. And after a century-plus, the darkness and terror apparently slipped our minds.

(319) 398-8262; todd.dorman@thegazette.com




ea

5 Reasons Why Should Hire a Web Design Company (Now!)

Wondering why you should hire a web design company? If so, click here for five reasons why you should hire a web design company now! More




ea

Why it’s a Bad Idea to Over-Customize Client Website Templates

Web clients love custom designs. Enough unique changes can turn a pre-made template into a beautiful, original site design. While there’s nothing wrong with tweaking a website for your clients, customization can be taken too far.   Granting excessive requests can put your projects into overtime and drive you mad. If you want to avoid […] More




ea

How to Use apply_filters() and do_action() to Create Extensible WordPress Plugins

How does a single plugin become the basis of a thriving technology ecosystem? Partly by leveraging the extensibilitythat WordPress’s event-driven Hooks system makes possible.




ea

How to Create a WordPress Intranet for Your Organization

Do you want to create a WordPress intranet for your organization? WordPress is a powerful platform with tons of flexible options that makes it ideal to be used as your company’s intranet. In this article, we will show you how to create a WordPress intranet.




ea

Beautiful Illustrations of Lovely Places by Darya Shnykina

En ces temps de confinement, l’heure est à l’évasion de l’esprit. Nous vous proposons aujourd’hui de découvrir le joli travail de l’illustratrice russe Darya Shnykina. Elle est l’auteure d’une série de créations intitulée Places I’d Love To Live In.  Elle a imaginé représenter d’adorables petites maisonnées solitaires en pleine nature. Des petits havres de paix où chacun […]




ea

Disable search engine on search pages

A good idea when trying to get the most out of your blog is usging the meta tag to tell the web bots to search & index your site. But for good SEO you should apply this code in your header.php file of your WordPress blog. <?php if(is_search()) { ?> <meta name="robots" content="noindex, nofollow" /> […]

The post Disable search engine on search pages appeared first on WPCult.




ea

WordCamp Las Vegas Near

The time is near, only 6 hours and some change to to get your tickets to WordCamp in Las Vegas! I have my tickets, and so do 125 other at the moment. If you have not purchased tickets and are going to be in the LV area, or planning on heading that way, well then […]

The post WordCamp Las Vegas Near appeared first on WPCult.




ea

Creating a custom widget

Today let’s learn a simple quick trick on how to create a custom widget. For my example I will show you how I created my Showcase widget located in the middle, to the right of the posts. First under your functions.php file type in the following: <?php // Custom Widget function MyCustomWidget() { ?> <li […]

The post Creating a custom widget appeared first on WPCult.




ea

Search Unleased: A custom WordPress plugin

Most all WordPress theme’s use a a simple search form to search your site. But what it you wanted to search your whole site and not just your posts. Search Unleashed comes into the picture. Search Unleashed performs searches across all data, including that added by plugins. Some features of this plugin are: Full text […]

The post Search Unleased: A custom WordPress plugin appeared first on WPCult.




ea

18-year-old charged in fatal shooting arrested for drunken driving while out on bail

CEDAR RAPIDS — A 17-year-old, charged in January with fatally shooting an 18-year-old during a drug robbery, was released in March only to be arrested about a month later for drunken driving.

Kyler David Carson, now 18, of Cedar Rapids, was charged last month with operating while intoxicated and unlawful possession of an anti-anxiety prescription drug.

After two judges reduced Carson’s bail, he bonded out and was released pending trial.

Police arrested Carson April 24 when they believed he was driving under the influence of alcohol or drugs, according to a criminal complaint.

He provided a breath sample, which showed no signs on alchol, but refused to provide a urine sample for chemical testing, the complaint states.

In January, Carson was charged with voluntary manslaughter, delivery of a controlled substance-marijuana, carrying weapons and obstructing prosecution.

He is accused of fatally shooting Andrew D. Gaston, 18, on Jan. 24, as Gaston and his cousin, Tyrell J. Gaston, 16, were attempting to rob marijuana from Carson, according to a criminal complaint.

Police received a report of shots being fired at 11:48 p.m. and found Andrew and Tyrell Gaston with gunshot wounds in the parking lot of 3217 Agin Court NE.

During the investigation, police learned the Gaston cousins had arranged, with the help of others, to rob Carson that night. Witnesses told investigators they contacted Carson and “lured” him to the address to rob him of marijuana.

Carson thought he was called that night to sell 45 pre-rolled tubes of marijuana for $900, according to criminal complaint.

While Carson was delivering marijuana to the others in their car, the cousins and a third person ambushed Carson from behind, according to a criminal complaint.

Andrew Gaston struck Carson in the back of the head with a metal object. Carson then turned around and exchanged gunfire with Tyrell Gaston before running from the parking lot, witnesses told police.

Both Carson and Tyrell Gaston later discarded their firearms, which police didn’t recover, according to the complaint.

Tyrell Gaston also was charged with first-degree robbery, conspiracy to deliver a controlled substance-marijuana, carrying weapons and obstructing prosecution.

A judge, during Carson’s initial appearance in the fatal shooting, set his bail at $50,000 cash only, according to court documents. His bail was amended, in agreement with prosecutor and Carson’s lawyer, to $50,000 cash or surety March 23 by 6th Judicial Associate District Judge Russell Keast.

Carson remained in jail, but his lawyer asked for a bond review three days later, March 26, and Associate District Judge Casey Jones lowered the bail to $30,000 cash or surety.

Carson posted bail that day, according to court documents.

Assistant Linn County Attorney Rena Schulte has filed a motion to revoke Carson’s pretrial release and will request his bail ne set at $500,000. A hearing is set on the motion for next Thursday in Linn County District Court.

If convicted, Carson faces up to 19 years in the fatal shooting and up to two years for the other offenses.

Comments: (319) 398-8318; trish.mehaffey@thegazette.com




ea

Court approves pilot program to test electronic search warrants

The Iowa Supreme Court approved a pilot program in the 4th Judicial District — Audubon, Cass, Fremont, Harrison, Mills, Montgomery, Pottawattamie, Page and Shelby counties — to develop procedures for the use of electronic search warrants.

Electronic search warrants will reduce the time required to obtain warrants, reduce travel time by law enforcement and make more effective use of judges’ time, according to the order. Paper warrants require law enforcement to fill out application forms and then leave the scene of the potential search and drive to find a judge, either at a courthouse during business hours or their home after hours. If the judge grants the warrant, then the officer has to drive back to the scene to execute it.

The electronic warrants can be submitted to a judge from a squad car computer, which is more efficient for law enforcement and the judges.

The pilot program will be evaluated by the court annually and will continue until further notice.

Fourth Judicial District Chief Judge Jeff Larson, who was on the advisory committee to develop recommendations for the new process, talked about the project, which will start in the next few weeks.

Page County Chief Deputy Charles McCalla, 6th Judicial Associate District Judge Nicholas Scott, Linn County Sheriff Capt. Greg McGivern and Marion police Lt. Scott Elam also provided their thoughts about electronic search warrants.

Q: Iowa courts started going paperless in 2010, so why did it take so long to get a pilot program for electronic search warrants?

A: Larson: It had been discussed at various levels since (the electronic document management system) started. We should take advantage of the electronic process because it will save us money. Most law enforcement agencies are now used to filing electronic citations from their patrol cars and offices. There may have been some pushback a few years ago because some counties or offices didn’t have computer scanners and needed technology. Now, the rural offices have that technology.

Q: As a task force member working on this program, what were the hurdles?

A: Larson: It was just working through the procedural issues to make sure there would be a safeguard throughout the process. When a search warrant is needed, law enforcement has to fill out the search warrant package, including the application with all the pertinent information, and submit it to a magistrate judge, associate or district judge in their judicial district. Then the officer or deputy can just call the judge to alert him/her to the warrant and the judge can ask for any additional information needed. The judge then administers the oath of office over the phone and signs off or denies the warrant. Law enforcement doesn’t have to leave the crime scene and can print off the warrant from their squad car computer.

The process of going to electronic warrants started in 2017, when the lawmakers amended the law to allow those to be submitted electronically, and then in 2018, the state court administrator’s office set up an advisory committee to develop recommendations.

Q: What has been the process to get a search warrant?

A: Larson: Law enforcement would have to leave the scene, fill out paperwork and then, many times, travel miles to go to the courthouse to have the judge sign it or if it’s after hours, go to a judge’s home. The officer may not be in the same county as the courthouse where the judge works or where the judge lives. (It) can take a lot of time. The process is way overdue.

Q: Page County Sheriff’s Chief Deputy Charles McCalla, what do you see as the biggest advantage for filing them electronically?

A: McCalla: The smaller counties have limited manpower, and some of the judges, like in Mills County, may be 60 to 70 miles away if a search warrant is needed after hours. Just traveling across the county can take time, depending where you are. At a minimum, we probably have to drive 30 minutes and up to an hour to get to a judge. This will save us time, money for travel and provide safety because we can stay at the scene to ensure the evidence hasn’t been tampered with.

Q: Is there a recent incident where an electronic search warrant may have helped?

A: McCalla: A few weeks ago, there was a theft report for a stolen chain saw and deputies went to the home and saw guns all over the house and they knew the guy who lived there had been convicted. They didn’t want to tip him off, so they just left the scene and went to get a search warrant. Luckily, the evidence was still there when they came back. They found about 90 guns.

Q: How do you feel about being the “guinea pigs” for the process?

A: McCalla: Happy to be. As law enforcement, we’re natural fixers. We find solutions. And this is an idea time to use the process during the COVID-19 pandemic to keep everyone safe. We won’t have to have any face-to-face contact with the judges.

Q: Is Linn County excited about the program, once it’s tested and used across the state?

A: Scott: I think many of us in the criminal justice system are eagerly awaiting the results of the pilot. They have the potential to make the system more efficient. It is in the interest of the police and the suspect, who is often detained pending a warrant, to get the search warrant application reviewed by a judge as soon as possible. A potential benefit is that officers could also use those more often, which protects citizens from unlawful search and seizures if a judge first reviews the evidence.

A: McGivern: I believe the implementation will be a much faster and efficient process for deputies. Like any new process, there may need to be some revisions that will have to be worked out, but I look forward to it.

A: Elam: We’ve done it this way for a long time, and it can be a bit of a haul for us, depending who’s on call (among the judges) — after hours. It’s nice to see there’s a pilot. The concern would be if something goes wrong in the process. If the internet is down or something else. Now, we have to go from Marion to the Linn County Courthouse. Then we go to the county attorney’s office to get a prosecutor to review the warrant and then find a judge (in courthouse during business hours). That takes some time. If you can type out the application from your car right at the scene, it would help with details on the warrant — describing the structure or property needing be searched. I just hope they work out all the bugs first.

Comments: (319) 398-8318; trish.mehaffey@thegazette.com




ea

Collaboration creates Camp-in-a-Bag kits for mentoring program

“I pledge my Head to clearer thinking, my Heart to greater loyalty, my Hands to larger service, and my Health to better living, for my club, my community, my country, and my world.” — 4-H pledge

The Johnson County 4-H program is living up to these words, teaming up with Big Brothers Big Sisters of Johnson County to assemble Camp-in-a-Bag kits for the youngest “Littles” enrolled in the BBBS mentoring program.

Big Brothers Big Sisters creates one-on-one opportunities between adult volunteer mentors and at-risk youths ages 6 to 18. Known as “Bigs” and “Littles,” they meet for at least six hours a month for 18 months. But those in-person outings to movies, museums, restaurants, recreational activities and new adventures, as well as monthly events and school-based programs organized by the agency, are on hold during the COVID-19 pandemic.

So the kits became an outreach outlet.

“I was thinking about ways that we would be able to connect with our Littles, to let them know that we’re thinking about them,” said Dina Bishara, program specialist for Big Brothers Big Sisters of Johnson County. “And also in a very small way, to try to fill that gap that so many kids are experiencing right now. They’re used to the structure and activity of school and extracurricular activities and playing with friends.”

The bags contain more than six hours of STEAM — science, technology, engineering, arts and math — activities, from the pieces needed for building gliders and balloon flyers, to conducting scientific experiments, planting seeds, choosing healthy snacks and writing down their thoughts.

Those activities also reflect the other contributing partners: Johnson County Master Gardeners, Johnson County Extension and Outreach’s Pick a Better Snack program, O’Brien Family McDonalds and Forever Green Garden Center.

“(We wanted to) just give them something really fun and also educational and engaging, to help them spend time with their siblings, if they have them, and get their parents involved, if possible — and just really keep them connected to that learning and the fun, but also to Big Brothers Big Sisters,” Bishara said. “Camp-in-a-Bag helps us structure things in an intentional and thoughtful way.”

Partnering with 4-H, known for its summer camps, fairs and educational programs, “was a really great way to make sure that the activities we were including were really robust, so it was not going to be a hodgepodge, throw-some-things-in-a-bag,” Bishara added. “We really needed to be deliberate about it, to have the directions nicely laid out.”

The first wave is being distributed to 20 elementary-age children, and officials are hoping to expand the project.

“Funding is always a question,” Bishara said. “We would love to expand to 20 or 40 for more. ... We’d sure like to be able to target the kits to a little older kids, who have different interests.”

Bishara and Kate Yoder, who works with 4-H out of the Iowa State University Extension office in Johnson County, are eager to continue their collaborative efforts.

“It really great,” Yoder said. “When you work together, things comes together and amazing things happen. I’m excited to see what the future holds — what partnerships we can build on and grow.”

Comments: (319) 368-8508; diana.nollen@thegazette.com

To help

• What: Big Brothers Big Sisters Camp-in-a-Bag kit contributions

• Contact: Email Dina Bishara at dina@bbbsjc.org




ea

Nearly 25,000 more Iowans file unemployment claims

Nearly 25,000 more Iowans filed unemployment claims in the past week, Iowa Workforce Development reported Thursday.

Continuing weekly unemployment claims total 181,358, the department reported.

Iowa Workforce Development said 24,693 people filed unemployment claims between April 26 and May 2. That included 22,830 initial claims by people who work in Iowa and 1,863 claims filed by people who work in Iowa but live in another state.

State unemployment insurance benefit payments totaled $50,931,302 for the same week, the department said.

Also this week, a total of $111,378,600 in Federal Pandemic Unemployment Compensation benefits was paid to 164,088 Iowans. Since April 4, a total of $439,126,200 has been paid.

A total of $10,046,089 was paid to 15,612 Iowans receiving Pandemic Unemployment Assistance benefits.

The industries with the most claims were manufacturing, 6,053; industry not available, self-employed, independent contractors, 4,010; health care and social assistance, 2,988; accommodation and food services, 2,200; and retail trade, 1,768.

Gov. Kim Reynolds is continuing to allow more businesses to reopen, which may mean more Iowans going back to work.

On Wednesday, after meeting with President Donald Trump at the White House, Reynolds issued a proclamation permitting a variety of businesses to reopen, including dental services, drive-in movie theaters, tanning facilities and medical spas.

She also relaxed mitigation strategies in the 22 counties that remain under more strict orders because the virus is more widespread there.

Beginning Friday in those 22 counties — which include Linn, Johnson and Black Hawk — malls and retail stores may reopen provided they operate at no more than 50 percent of capacity, and fitness centers may reopen on an appointment basis only.

For more information on the total data for this week’s unemployment claims, visit https://www.iowalmi.gov/unemployment-insurance-statistics.

Comments: (319) 398-8375; james.lynch@thegazette.com




ea

Marion coronavirus recovery task force wants residents to come out of this healthy and to &#x2018;a vibrant economy&#x2019;

MARION — Marion’s 14-member COVID-19 Economic Recovery Task Force is beginning to work on recommendations of how to get people back to work, while keeping everyone safe.

“It’s hard to know right now at the beginning the various outcomes that are going to come out of this,” Marion Mayor Nick AbouAssaly told task force members in a meeting held this week via Zoom.

“Community sectors will work independently and report to the steering committee with ideas, strategies or policy recommendations,” he said.

In turn, the task force will consider recommendations to the Marion City Council, and AbouAssaly said he will update the council on the task force meetings.

“Unfortunately, we have to accept that the virus is here to stay,” AbouAssaly said. “It’s part of our life for the time being. We have to be able to plan for getting back to doing things and leading our lives in a way that allows us to exist with the virus in our community.”

Elizabeth Cwik, a Marion resident who works for the Greater Cedar Rapids Community Foundation, said there’s a “strong interest” among task force members to provide accurate information to the public about the virus.

“I see clear, consistent messaging from a variety of sectors from the schools, government, businesses and nonprofits. Then that message gets through,” Cwik said. “If that message is, ‘We care, and we want you to come out whole, and we want there to be a vibrant economy to be continued with every citizen’s effort,’ I think that’s a valuable contribution to the recovery.”

In joining the task force, Dr. Jaclyn Price said she hopes to dispel inaccurate information about the coronavirus and help businesses find ways to safely bring their employees back to work.

“I anticipate businesses will be operating at reduced capacities,” she said. “Maybe doing appointments rather than walk-in business, and cleaning more routinely.”

If businesses require employees and customers to wear masks, it will protect others from asymptomatic spread of the virus, she said.

“We will still see virus activity until we get a vaccine or herd immunity,” Price said. “This is going to be a problem for months to come. We’re trying to find ways to open slowly, but also understanding if we reopen everything and have to close it again, that could be more detrimental to people’s psychology or finances of businesses.”

The Rev. Mike Morgan of Marion United Methodist Church said “greater conversation” with government, business, education and health care leaders will help.

“Marion has become a town that is proactive,” Morgan said. “We really seek to have good things happen to our citizenry rather than let things happen and we react to them. ... As a person in the faith community, it’s important for us to be tending to people’s emotional, psychological, spiritual and, to some degree, physical needs.”

Comments: (319) 368-8664; grace.king@thegazette.com

MARION TASK FORCE

Those serving on the Marion COVID-19 Economic Recovery Task Force, all Marion residents and volunteers, are:

• Nick AbouAssaly, Marion mayor

• Jill Ackerman, president, Marion Chamber of Commerce

• Shannon Bisgard, Linn-Mar schools superintendent

• Amber Bisinger, communications officer for the city

• Elizabeth Cwik, Greater Cedar Rapids Community Foundation

• Lee Eilers, executive committee member, Marion Economic Development Corp.

• Nick Glew, president, Marion Economic Development Corp.

• Amber Hoff, marriage and family therapist

• Steve Jensen, Marion City Council member

• Mike Morgan, pastor, Marion United Methodist Church

• Brent Oleson, Linn County supervisor

Lon Pluckhahn, Marion city manager

• Jaclyn Price, M.D., Mercy Clinic-Marion

• Brooke Prouty, program director, Marion Chamber of Commerce




ea

No Linn County Fair this year because of coronavirus concerns

CEDAR RAPIDS — The Linn County Fair has canceled grounds and grandstand entertainment at this year because of the novel coronavirus and is looking at ways youths could exhibit their work.

“After consulting with Linn County Public Health, the Linn County Board of Supervisors, and other stakeholders, it was determined this was the best decision due to the uncertainty of what the public health situation may look like at the end of June,” Albert Martin, Linn County Fair Board president, said Thursday in a statement.

The fair was scheduled June 24-28.

The Linn County Fair Association said it is working with the Iowa State University Extension and Outreach of Linn County and Linn County 4-H to determine how 4-H and FFA members and other youths will exhibit their work. Those details — which could include in-person or virtual exhibiting — are expected to be finalized and announced in mid-May.

Tom Barnes, executive director of the Association of Iowa Fairs, told The Gazette on Thursday that the Benton County Fair also was canceled for 2020.

Organizers for the Wapello County Fair in south-central Iowa previously announced they would not host the fair this year.

Comments: (319) 339-3155; lee.hermiston@thegazette.com




ea

Uptown Marion Market opening with caveats

MARION — While the Uptown Marion Market will continue to sell fresh produce, it will look a little different this year.

The market will continue operating on the second Saturday of June, July and August with some adjustments.

But the city of Marion has canceled community events until at least early July because of the coronavirus pandemic.

The Uptown market will run along Sixth Avenue instead of being held in City Square Park. It will be fenced and no more than 50 people will be let in at an time.

Jill Ackerman, president of the Marion Chamber of Commerce, said there are usually between 50 and 60 vendors at each market, but she expects only 15 to 25 at this summer’s markets.

“The main thing here is safety,” Ackerman said. “We want to make sure people have opportunities to buy fresh produce from our local growers, but we’re going to ask patrons to only spend 30 minutes inside the market.”

Vendors will sell produce and some plants, but artisan items will not be available.

While there will be summer events through the Chamber of Commerce, Ackerman said, they will be fewer and look a little different than they usually do.

Free community concerts and movie nights are canceled until July by the city, according to a news release.

The Marion Farmers Market, held at Taube Park, is expected to resume May 16.

Officials hope to have smaller-scale events throughout the summer like performances in the Uptown Artway, Messy Art Days and the Tiny Fair series as restrictions ease.

Sunrise Yoga at the Klopfenstein Amphitheater at Lowe Park is expected to take place every Saturday from June to August.

“Unfortunately, given our current reality, we know that 2020 will be far from normal,” said Marion Mayor Nicolas AbouAssaly. “After careful consideration and consultation with event organizers and sponsors, we have made the collective decision to cancel the free community concerts, events and movie nights originally planned for our outdoor public venues through early-July.”

Comments: (319) 368-8664; grace.king@thegazette.com




ea

Ahead of VP Pence&#x2019;s Iowa visit, Joe Biden&#x2019;s campaign calls out &#x2018;consequential failure&#x2019; of Trump coronavirus response

Vice President Mike Pence owes Iowans more than a photo-op when he visits Des Moines today, according to Joe Biden’s campaign.

“Iowans are seeing up close the most consequential failure of government in modern American history,” said Kate Bedingfeld, spokeswoman for the former vice president and presumptive Democratic presidential nominee.

“With nearly 300,000 Iowans filing for unemployment, rural hospitals on life support, Latino communities disproportionately suffering and workers on the job without sufficient protection, Mike Pence owes Iowans more than a photo-op — he owes them answers,” she said.

Pence, head of the White House coronavirus task force, is scheduled to meet with Iowa Gov. Kim Reynolds and U.S. Sens. Chuck Grassley and Joni Ernst, all Republicans, as well as with faith, farm and food production leaders.

Pence will talk to faith leaders about how they are using federal and state guidelines to open their houses of worship in a safe and responsible manner.

Later, he will go to Hy-Vee’s headquarters in West Des Moines for a roundtable discussion with agriculture and food supply leaders to discuss steps being taken to ensure the food supply remains secure.

Pence has called Iowa a “success story” in its response to the COVID-19, but Bedingfeld said the Trump administration failed to protect Iowa families from the virus that has claimed the lives of 231 Iowans.

“From devastating losses across the state, at meatpacking plants to rural communities, one thing is clear — it’s Iowans and the American people who are paying the price for the Trump administration’s denials and delays in response to this pandemic,” she said.

“Instead of listening to our own intelligence agencies and public health experts, Donald Trump was fed dangerous propaganda from the Chinese Communist Party — and he bought it,” she said. “Iowans deserve better — they deserve Joe Biden.”

For his part, Grassley said he welcomes the discussion with Pence.

“There’s much work to be done, and the pandemic is disrupting all of our communities,” Grassley said. “It’s important to hear directly from those who help feed the nation and the world.”

Ernst also is looking forward to the discussion of how Iowa is working to protect the health and safety of Iowa’s families and communities while reopening the state’s economy.

“We continue to take an all-hands-on-deck approach to tackling this pandemic,” she said. “Together, we will get through this.”

Comments: (319) 398-8375; james.lynch@thegazette.com




ea

Tyson outbreak: Short closure but enduring grief

As the coronavirus spread from the nation’s meatpacking plants to the broader communities where they are located, it burned through a modest duplex in Waterloo.

In the downstairs unit lived Jim Orvis, 65, a beloved friend and uncle who worked in the laundry department at the Tyson Foods pork processing facility, the largest employer in Waterloo. Upstairs was Arthur Scott, a 51-year-old father who was getting his life on track after a prison term for drugs. He worked 25 miles away at the Tyson dog treats factory in Independence.

The two men were not well acquainted. But both fell ill and died last month within days of each other from COVID-19 — casualties of an outbreak linked to the Waterloo plant that spread across the city of 68,000 people.

Similar spread has happened in other communities where the economy centers on raising hogs and cattle and processing their meat, including the hot spots of Grand Island, Neb., and Worthington, Minn.

The virus is “devastating everything,” duplex owner Jose Garcia, who received notification two days apart from his deceased tenants’ relatives, said recently. “These two guys were here last week. Now they are gone. It’s crazy.”

He said it’s possible one of the men infected the other because they shared an entryway, or that they each contracted the virus separately at their workplaces.

The virus threatens the communities’ most vulnerable populations, including low-income workers and their extended families.

“They’re afraid of catching the virus. They’re afraid of spreading it to family members. Some of them are afraid of dying,” said the Rev. Jim Callahan, of the Church of St. Mary in Worthington, a city of 13,000 that has attracted immigrants from across the globe to work at the JBS pork plant.

“One guy said to me, ‘I risked my life coming here. I never thought something that I can’t see could take me out.’ ”

In Grand Island, an outbreak linked to a JBS beef plant that is the city’s largest employer spread rapidly across the rural central Nebraska region, killing more than three dozen people. Many of the dead were elderly residents of long-term care facilities who had relatives or friends employed at the plant.

In Waterloo, local officials blamed Tyson for endangering not only its workers and their relatives but everyone else who leaves home to work or get groceries.

They were furious with the state and federal governments for failing to intervene and for pushing hard to reopen the plant days after public pressure helped idle it.

“We were failed by people who put profit margins and greed before people, predominantly brown people, predominantly immigrants, predominantly people who live in lower socioeconomic quarters,” said Jonathan Grieder, a high school social studies teacher who serves on Waterloo’s City Council. “This is going to be with us for so long. There are going to be very deep scars in our community.”

Grieder cried as he recounted how one of his former students, 19, lost her father to the coronavirus and has been left to raise two younger siblings. Their mother died of cancer last September.

Black Hawk County Sheriff Tony Thompson said he first became concerned after touring the Tyson plant April 10 and witnessing inadequate social distancing and a lack of personal protective equipment. As hundreds of workers began getting sick or staying home out of fear, Thompson joined the mayor and local officials in asking Tyson to close the plant temporarily on April 16.

But Tyson, with support from Gov. Kim Reynolds, waited until April 22 to announce that step after the outbreak intensified. The company warned of the significant economic consequences even a temporary shutdown would create.

The plant, which can process 19,500 hogs per day, resumed limited production this past week.

First, Tyson invited local officials and some employees inside for tours to show the new safety precautions, including plastic shields and more space between workers.

This time, Thompson said he was “reserved in my optimism” that worker safety would be a priority at the plant.

Although Tyson has declined to say how many of the plant’s 2,800 workers had been infected, state health officials announced last week that 444 — or 17 percent — had the virus.

In three weeks, Black Hawk County’s cases skyrocketed from 62 to at least 1,450, or more than 1 percent of the county population. Deaths because of the virus rose from zero to at least 15. Ninety percent of the cases are “attributed or related to the plant,” the county’s public health director said.

Thompson said the plant’s outbreak decimated the community’s “first line of defense” and allowed the virus to spread to nursing homes and the jail he oversees.

“These are the places we did not want to fight the COVID-19 virus,” he said.

The losses mounted.

A refugee from Bosnia died days after falling sick while working on the Tyson production line, leaving behind her heartbroken husband.

The virus also took an intellectually disabled man who died at 73, years after escaping forced labor at a turkey plant and retiring to Waterloo.

Scott, who went by the nickname Dontae, was planning to reunite in June with two teenage children he had not seen in person since he was incarcerated on federal drug charges in 2011.

A former small-time heroin distributor who suffered from addiction, he and his wife divorced during his prison term, and she moved to Mississippi with the children.

Since his 2018 release, friends said he was doing well and rebuilding relationships.

Scott told his daughter, Destiny Proctor, 18, that he suspected he became infected at the Tyson pet food factory, which has stayed open under federal guidance classifying the industry as critical infrastructure.

Proctor and her 15-year-old brother were looking forward to living with their dad this summer. Instead, their final talk was a video call from a hospital where he struggled to talk.

“It was so, so sad,” Proctor, who described her father as funny and caring and frequently sending her cards and gifts, said of their final call. “He told me he couldn’t breathe.”




ea

&#x2018;Death stalked swiftly&#x2019; in 1918. What will we remember now?

In August 1919, the Cedar Rapids Evening Gazette opined in favor of the passage of a $5 million congressional appropriation to “investigate influenza, its cause, prevention and cure.”

“We all remember without effort the darkness and terror which engulfed the land last fall and winter as death stalked swiftly from seaboard to seaboard, into crowded city and unto lonely plain, sparing not the cottage of the poor nor the mansion of the rich,” the editorial said. “In four short months, influenza claimed a half million lives and pressed millions of others onto beds of sickness, suffering and helplessness. The nation’s mortality rate leapt high and with astounding speed. The nation was unprepared to cope with a disease calamity such as it has never known.”

The Gazette lamented that billions of dollars in loss were wrought by the pandemic of so-called Spanish influenza, compared with only $5 million being spent to investigate the virus.

“More has been spent in studying diseases of hogs,” the editorial argued.

Just less than a year earlier, The Evening Gazette did not see “darkness and terror” coming. A front page, above-the-fold story Sept. 25, 1918, asked: “Spanish Influenza just the old-fashioned grippe?” “Grippe” is an old-time term for the flu, by the way.

“As a matter of fact, in the opinion of City Physician Beardsley, and a good many other Cedar Rapids men in the same profession, Spanish influenza is just another name for the regular old fashioned influenza and is no different from the influenza we have always had. A bad cold is a bad cold, and a worse cold is grippe, which covers a multitude of things ...,” The Gazette reported, optimistically.

An earlier strain of influenza in the spring of 1918 had been less virulent and deadly. But the second wave was no ordinary grippe.

By mid-October, according to reports in The Evening Gazette, influenza caseloads exploded. On Oct. 12, 1918, the local health board shut down pool rooms, billiard halls and bowling alleys. It pleaded with store owners to avoid allowing crowds to linger. On Oct. 16, stores were ordered to discontinue any special sales that might draw more shoppers.

Restrictions tightened as the pandemic worsened.

Death notices were stacking up on Gazette pages, in rows reminiscent of small tombstones. Many victims were cut down in the prime of life by a virus that struck young, healthy people hardest. Mothers and fathers died, leaving young children. Soldiers serving in World War I died far away from home. Visitors to town never returned home.

Young brothers died and were mourned at a double funeral. A sister who came to care for a sick brother died, and so did her brother.

Ray Franklin Minburn, 24, died of influenza, leaving behind six sisters and two brothers. “Mr. Minburn was a faithful son, a devoted companion, a good neighbor,” concluded his death announcement on Oct. 21, 1918.

On the same page that day came news, tucked among the tombstones, reporting that Iowa Gov. William Harding had recovered from influenza, in the midst of his reelection campaign, and was back in the office. You might remember Harding as the governor who banned German and other languages during World War I and who was nearly impeached for bribery in 1919.

Not far from Harding’s update came news from the prison in Anamosa that “whisky and quinine” were being deployed to attack the grippe.

The pages of The Evening Gazette also were dotted with advertisements for supposed cures and treatments.

“Danger of infection from influenza or any contagious disease can be eliminated by using preventive measures,” prescribed by Ruby S. Thompson, chiropractor and naturopathic physician. Those included “Sulphur-vapor baths, Carlsbad mineral bath.”

You could build up your blood using “Gude’s Pepto-Mangan,” the “Red Blood Builder.” Keep your strength up with Horlick’s Malted Milk.

One ad looked exactly like a news story, carrying the bold headline “Druggists still asked to conserve stocks of VapoRub needed in ‘flu’ districts.” In a tiny notation at the end of the “story” were the words “The Vicks Chemical Co.”

That August 1919 Gazette editorial I mentioned makes me wonder what we’ll be writing in a year or so after our current pandemic.

Death stalking us swiftly from seaboard to seaboard in an unprepared nation, preceded by the casual insistence it’s no worse than the seasonal flu, sounds eerily familiar in 2020. More attention is being paid to hogs than the health of humans working in meatpacking plants.

Will we be writing in 2021 how reopening states and counties too soon led to our own second wave? Here in Iowa, reopening began before we had a fully working predictive model to chart the pandemic’s course and before new testing efforts had a chance to ramp up. Will decisions made without crucial information look smart in 2021? Or will we wish we’d waited just a couple more weeks?

What of the protesters demanding liberation? What about the president, running for reelection in a nation harmed by his crisis mismanagement? What will a new normal look like?

Will there be newspapers around to editorialize in the aftermath? After all, most of the pitches for fake cures are online now, some even extolled at White House briefings.

And will we be better prepared next time? I bet editorial writers in 1919 figured we’d have this pandemic response thing down to a science by now.

Little did they know that in 2020 we’d have so little respect for science. And after a century-plus, the darkness and terror apparently slipped our minds.

(319) 398-8262; todd.dorman@thegazette.com




ea

Dubuque woman pleads to helping buy heroin that led to fatal overdose of another person

CEDAR RAPIDS — A Dubuque woman who helped her boyfriend and another person buy heroin that later led to a fatal overdose was convicted Thursday in federal court.

Jacqueline M. Birch, 23, pleaded guilty in U.S. District Court to one count of aiding and abetting the distribution of a controlled substance.

During the plea hearing, Birch admitted she knew that another person was going to illegally distribute a drug last May, and she aided in that distribution.

Evidence at a previous hearing showed that Birch drove her boyfriend, Mateusz Syryjczyk, 29, of Rockford, Ill., and another person, not identified in court documents, to a residence in Dubuque on May 27. Birch and the other person went into the residence and bought heroin from a dealer. The three drove to a hotel in Dubuque and all used the heroin.

The other person began to overdose in the room, but Birch and Syryjczyk didn’t immediately call 911, according to evidence. Over many hours, Birch occasionally would perform CPR on the person to restore some breathing function, though the person never regained consciousness.

Eventually, Birch and Syryjczyk decided to call 911, and Syryjczyk took the remaining drug paraphernalia from the room to prevent law enforcement from finding it, according to court documents. Birch and Syryjczyk also made false statements to police about the cause of the person’s condition.

Court documents showed the overdose victim died at the scene. An autopsy later determined the cause of death was use of heroin, fentanyl and valeryl fentanyl.

Syryjczyk previously pleaded to misprision of a felony and remains free on bond pending sentencing.

Birch faces up to 20 years in federal prison, a $1 million fine and supervised release for life following her prison term.

Sentencing will be set after a presentencing report is prepared.

The case was investigated by the Dubuque Drug Task Force and is being prosecuted by Assistant U.S. Attorney Dan Chatham.

Comments: (319) 398-8318; trish.mehaffey@thegazette.com




ea

Ready to reopen? Four Cedar Rapids business leaders offer advice

On Wednesday, Gov. Kim Reynolds removed some restrictions on businesses in the 22 counties that have been seeing higher numbers of Iowans affected by COVID-19, including Linn and Johnson counties.

Now those organizations have to make decisions — on bringing back employees, services to provide and how much access to allow for customers.

And as those businesses reopen — some after more than two months — crucial steps likely will include ongoing communication with employees and customers and a well-thought-out restart plan.

The Gazette spoke with business leaders about the challenges faced by business owners as they consider how and when to open their doors.

• David Drewelow of ActionCoach Heartland in Cedar Rapids is a consultant with 19 years of business coaching experience.

• David Hensley, director of the University of Iowa’s John Pappajohn Entrepreneurial Center, has expertise in small business management during a crisis.

• Josh Seamans is vice president of Cushman and Wakefield, a global commercial real estate adviser that operates offices in more than 60 countries including China.

• Steve Shriver is a Cedar Rapids entrepreneur who operates and/or helped found four diverse enterprises, including Eco Lips and Brewhemia.

Their responses here have been condensed from lengthy individual interviews.

How important is communication and having a well-prepared plan for resumption of business?

Shriver: The one thing that has been imperative throughout this whole process is communication with employees, customers and the public. I also would recommend writing as detailed a business resumption plan as possible.

One of the main reasons is to fully understand what you are doing as this is a brand-new challenge that none of us has faced.

Drewelow: You really need to be communicating now, more than ever, with your employees, customers, vendors and suppliers. What does your plan for the next 20 to 30 days look like? What are things that you can be doing right now to get ready?

Hensley: I think it is critically important to have a reopening plan because most businesses are not going to be at full strength right away. What might their revenue forecasts look like? How can they keep their costs down as their business starts to rebound before it gets back to full capacity?

Seamans: Your plan should include a checklist of reopening steps appropriate to your type of business. Retail will have different items than distribution or industrial businesses.

You need to communicate your plan to employees, customers, landlords and lenders.

How much will fear play a role in the resumption of business?

Shriver: Everyone has a different idea of the risks involved, such as using a handle to open a door or interacting with a person — the little things that we are used to doing.

When you look at the risk versus reward of doing that, some people will be willing to go into a store and others will stay home. Some employees don’t want to come back to work yet and some people are itching to get back. You have everything in between.

Drewelow: The fear factor is huge. For the small business owner, we try to channel that fear into a focus on being highly aware of all the possibilities to mitigate concerns.

If you own a restaurant, can you post the menu online or use disposable menus? That way, a customer doesn’t have to touch something that might have been handled by someone else.

Appropriate spacing of customers within a restaurant also will help alleviate some of the fear.

Hensley: You need to communicate what steps you are taking to protect the health and safety of your employees and your customers. If you will be requiring the use of personal protective equipment like face masks, are you going to make them available?

Will limiting the number of people entering a business be difficult?

Shriver: There are not a lot of people who want to gather in masses right now. It seems like as businesses start to reopen, it will be more like a trickle.

It will be just like turning on a water spigot, with the flow of customers gradually increasing.

Hensley: I think we will see a lot more customers buying, rather than just shopping. They are going to buy the items they came for and then leave.

If businesses have more vulnerable customers, I would recommend establishing separate early morning times like many of the grocery stores have done to provide a safer environment.

Many companies have adopted using digital conferencing platforms for meetings. Will we see that trend continue?

Seamans: I think Zoom will be used for more internal meetings, so there is no need for someone to fly from, say, San Francisco to New York. But in terms of sales, it does not replicate that face-to-face interaction.

We have done work with clients that live several hours away and we have to come in for a city council meeting for a project that we are working on. That’s a three-hour drive in for a one- or two-hour council meeting and another three-hour drive back — basically an eight-hour day. If we can Zoom in and answer any questions, that’s a lot more efficient at less cost.

What should a small-business owner consider when determining how many employees to recall?

Shriver: We will be able to bring some people back to work and generate some revenue, but not in a huge way. Anybody who can work from home should continue working from home for as long as they possibly can.

We should not be rushing to get those people back. There is no incentive.

Hensley: Owners are going to be making hard decisions. Do I bring back half of my team at full time or do I bring everyone back at reduced hours? What are those implications going to be?

In some cases, other industries have been hiring and some may be making more money. Businesses may have to pay more to attract that talent back.

Restaurants have been forced to change their business model from on-premise dining to carryout and delivery. Should all owners take this opportunity to examine and update their business model?

Shriver: We took two businesses — SOKO Outfitters, a retail store, and Brewhemia, a restaurant — and put them rapidly online within a month. When we come out of this, I think we will be stronger because we will have that infrastructure in place in addition to the old school face to face traffic that we used to have.

Hensley: I think this is definitely the time to look at your business model to determine what is appropriate given the economic situation that we have. That is not just going to be critical for reopening, but over the next six months to a year as long as we are dealing with the virus.

Some business owners will see that their customers have lost their jobs or seen their income drop dramatically. They are going to be changing their patterns of consumption based on necessities.

Drewelow: Some of my clients believe that are looking their competitors and realize that some may not reopen. They are looking at whether they can merge with them or somehow salvage parts of that business.

Some business owners have realized that the way they deliver products or services will have to change. Many of my older clients have been dragged into using modern technology.




ea

Campgrounds reopen in Iowa Friday, see takers despite some health limitations

Some Eastern Iowans are ready to go camping.

With Gov. Kim Reynolds allowing campgrounds across the state to open Friday, some people wasted little time in heading outdoors.

“They’re already starting to fill up,” said Ryan Schlader of Linn County Conservation. “By about 7 this morning, we had a dozen at Squaw Creek Park. People were coming in bright and early to camp. We’re not surprised.”

Schlader said Linn County Conservation tried to have the campgrounds open at the county’s Squaw Creek, Morgan Creek and Pinicon Ridge parks at 5 a.m. Friday. He expected all of them would be busy.

“I think people were ready to go,” he said.

Lake Macbride State Park in Johnson County didn’t see quite as much of a rush for campsites, park manager Ron Puettmann reported Friday morning, saying he’d had six walk-ins for the park’s 42 campsites.

Camping this weekend will be done on a first-come, first-served basis. Sites won’t be available for reservations until next week, though online reservations can be made now, Puettmann said.

“I’m quite sure people were waiting anxiously to get on,” he said.

While Reynolds’ campground announcement came Wednesday, Schlader and Puettmann said they had no issues having the campgrounds ready for Friday.

Schlader said county staff have been in touch with the Iowa Department of Natural Resources and other county conservation boards to discuss protocols for reopening to ensure a safe experience for campers and employers.

“We anticipated at some point the order would be lifted,” Schlader said. “We were anticipating maybe May 15. The campgrounds were in good shape and ready to go.”

For now, camping comes with some limitations:

• Campers can camp only in a self-contained unit with a functioning restroom, such as a recreational vehicle.

• Shower houses with restrooms will remain closed for the time being.

• Campsites are limited to six people unless they are from the same household.

• No visitors are allowed at the campsites.

Puettmann said staffers and a DNR officer will be on hand to make sure guidelines are followed, but he didn’t anticipate enforcement would be an issue.

“For the most part, we’re going to allow people to police themselves,” he said.

It’s hard to gauge demand, Schlader said.

The weather isn’t yet deal for camping, and some people might not be ready to camp, given the continuing coronavirus.

“There is a lot of uncertainty,” he said. “Do people feel like they need to get out and enjoy a camping experience within their own campsite, or do people still feel under the weather and think it’s not a good idea for my family to go right now? ... We just want this to be an option for people.”

Comments: (319) 339-3155; lee.hermiston@thegazette.com




ea

I’ve shot at this location a few times but for some reason...



I’ve shot at this location a few times but for some reason I’ve never seen it from the other side. Literal proof that shooting with other creatives gives you new perspective. ???? (at Toronto, Ontario)




ea

And while we’re in the process of missing European...



And while we’re in the process of missing European architecture… ????

4 more days left to catch my Lightroom presets for 50% off! ⌛️ (at Copenhagen, Denmark)




ea

Merry Xmas everyone! It’s giveaway time! ???????? . Thank you to...



Merry Xmas everyone! It’s giveaway time! ????????
.
Thank you to all those who participated in my preset giveaway this week! The support makes all the hard work and extra effort worth it!
.
Without further ado, the randomly drawn winners of my custom Lightroom presets are @l9lee @rchellau @bokeh.jay! Congrats and check your DMs soon for details! ????
.
You still have until tomorrow to grab my presets (which this shot was edited with) for 50% off! They’ll be going back to regular price after so don’t miss out! ???? (at Toronto, Ontario)




ea

I just realized that I can export my entire story all at once...



I just realized that I can export my entire story all at once now, which means uploading my tutorials to my Facebook page will be a million times easier (it was tedious to stitch all the individual clips together before). ????
.
Related: I posted a story this morning deconstructing the edit on yesterday’s shot.
.
Also related: I uploaded the 3 tutorials from my November feature on @thecreatorclass to my Facebook page this morning too. More to come! (at London, United Kingdom)




ea

I took this shot about a year ago when I had a very different...



I took this shot about a year ago when I had a very different editing style. A ton of faded blacks and, believe it or not, a subtle green tint (unknowingly inherited from the preset I was using at the time). Re-editing it now, I’m happy with the way my style has evolved, though I can already sense that I’m on the brink of evolving it again. And I’m okay with that. ???? (at London, United Kingdom)




ea

This trip solidified my conviction to learning photography. A...



This trip solidified my conviction to learning photography. A lot has happened since this shot was taken.
Can you pinpoint the moment you decided to pursue photography? (at Toronto, Ontario)




ea

A lot to look forward to in 2017. How did 2016 treat you: ???? or...



A lot to look forward to in 2017. How did 2016 treat you: ???? or ????? (at San Francisco, California)









ea

Facebook Live Streaming and Audio/Video Hosting connected to Auphonic

Facebook is not only a social media giant, the company also provides valuable tools for broadcasting. Today we release a connection to Facebook, which allows to use the Facebook tools for video/audio production and publishing within Auphonic and our connected services.

The following workflows are possible with Facebook and Auphonic:
  • Use Facebook for live streaming, then import, process and distribute the audio/video with Auphonic.
  • Post your Auphonic audio or video productions directly to the news feed of your Facebook Page or User.
  • Use Facebook as a general media hosting service and share the link or embed the audio/video on any webpage (also visible to non-Facebook users).

Connect to Facebook

First you have to connect to a Facebook account at our External Services Page, click on the "Facebook" button.

Select if you want to connect to your personal Facebook User or to a Facebook Page:

It is always possible to remove or edit the connection in your Facebook Settings (Tab Business Integrations).

Import (Live) Videos from Facebook to Auphonic

Facebook Live is an easy (and free) way to stream live videos:

We implemented an interface to use Facebook as an Incoming External Service. Please select a (live or non-live) video from your Facebook Page/User as the source of a production and then process it with Auphonic:

This workflow allows you to use Facebook for live streaming, import and process the audio/video with Auphonic, then publish a podcast and video version of your live video to any of our connected services.

Export from Auphonic to Facebook

Similar to Youtube, it is possible to use Facebook for media file hosting.
Please add your Facebook Page/User as an External Service in your Productions or Presets to upload the Auphonic results directly to Facebook:

Options for the Facebook export:
  • Distribution Settings
    • Post to News Feed: The exported video is posted directly to your news feed / timeline.
    • Exclude from News Feed: The exported video is visible in the videos tab of your Facebook Page/User (see for example Auphonic's video tab), but it is not posted to your news feed (you can do that later if you want).
    • Secret: Only you can see the exported video, it is not shown in the Facebook video tab and it is not posted to your news feed (you can do that later if you want).
  • Embeddable
    Choose if the exported video should be embeddable in third-party websites.

It is always possible to change the distribution/privacy and embeddable options later directly on Facebook. For example, you can export a video to Facebook as Secret and publish it to your news feed whenever you want.


If your production is audio-only, we automatically generate a video track from the Cover Image and (possible) Chapter Images.
Alternatively you can select an Audiogram Output File, if you want to add an Audiogram (audio waveform visualization) to your Facebook video - for details please see Auphonic Audiogram Generator.

Auphonic Title and Description metadata fields are exported to Facebook as well.
If you add Speech Recognition to your production, we create an SRT file with the speech recognition results and add it to your Facebook video as captions.
See the example below.

Facebook Video Hosting Example with Audiogram and Automatic Captions

Facebook can be used as a general video hosting service: even if you export videos as Secret, you will get a direct link to the video which can be shared or embedded in any third-party websites. Users without a Facebook account are also able to view these videos.

In the example below, we automatically generate an Audiogram Video for an audio-only production, use our integrated Speech Recognition system to create captions and export the video as Secret to Facebook.
Afterwards it can be embedded directly into this blog post (enable Captions if they don't show up per default) - for details please see How to embed a video:

It is also possible to just use the generated result URL from Auphonic to share the link to your video (also visible to non-Facebook users):
https://www.facebook.com/auphonic/videos/1687244844638091/

Important Note:
Facebook needs some time to process an exported video (up to a few minutes) and the direct video link won't work before the processing is finished - please try again a bit later!
On Facebook Pages, you can see the processing progress in your Video Library.

Conclusion

Facebook has many broadcasting tools to offer and is a perfect addition to Auphonic.
Both systems and our other external services can be used to create automated processing and publishing workflows. Furthermore, the export and import to/from Facebook is also fully supported in the Auphonic API.

Please contact us if you have any questions or further ideas!




ea

Auphonic Audio Inspector Release

At the Subscribe 9 Conference, we presented the first version of our new Audio Inspector:
The Auphonic Audio Inspector is shown on the status page of a finished production and displays details about what our algorithms are changing in audio files.

A screenshot of the Auphonic Audio Inspector on the status page of a finished Multitrack Production.
Please click on the screenshot to see it in full resolution!

It is possible to zoom and scroll within audio waveforms and the Audio Inspector might be used to manually check production result and input files.

In this blog post, we will discuss the usage and all current visualizations of the Inspector.
If you just want to try the Auphonic Audio Inspector yourself, take a look at this Multitrack Audio Inspector Example.

Inspector Usage

Control bar of the Audio Inspector with scrollbar, play button, current playback position and length, button to show input audio file(s), zoom in/out, toggle legend and a button to switch to fullscreen mode.

Seek in Audio Files
Click or tap inside the waveform to seek in files. The red playhead will show the current audio position.
Zoom In/Out
Use the zoom buttons ([+] and [-]), the mouse wheel or zoom gestures on touch devices to zoom in/out the audio waveform.
Scroll Waveforms
If zoomed in, use the scrollbar or drag the audio waveform directly (with your mouse or on touch devices).
Show Legend
Click the [?] button to show or hide the Legend, which describes details about the visualizations of the audio waveform.
Show Stats
Use the Show Stats link to display Audio Processing Statistics of a production.
Show Input Track(s)
Click Show Input to show or hide input track(s) of a production: now you can see and listen to input and output files for a detailed comparison. Please click directly on the waveform to switch/unmute a track - muted tracks are grayed out slightly:

Showing four input tracks and the Auphonic output of a multitrack production.

Please click on the fullscreen button (bottom right) to switch to fullscreen mode.
Now the audio tracks use all available screen space to see all waveform details:

A multitrack production with output and all input tracks in fullscreen mode.
Please click on the screenshot to see it in full resolution.

In fullscreen mode, it’s also possible to control playback and zooming with keyboard shortcuts:
Press [Space] to start/pause playback, use [+] to zoom in and [-] to zoom out.

Singletrack Algorithms Inspector

First, we discuss the analysis data of our Singletrack Post Production Algorithms.

The audio levels of output and input files, measured according to the ITU-R BS.1770 specification, are displayed directly as the audio waveform. Click on Show Input to see the input and output file. Only one file is played at a time, click directly on the Input or Output track to unmute a file for playback:

Singletrack Production with opened input file.
See the first Leveler Audio Example to try the audio inspector yourself.

Waveform Segments: Music and Speech (gold, blue)
Music/Speech segments are displayed directly in the audio waveform: Music segments are plotted in gold/yellow, speech segments in blue (or light/dark blue).
Waveform Segments: Leveler High/No Amplification (dark, light blue)
Speech segments can be displayed in normal, dark or light blue: Dark blue means that the input signal was very quiet and contains speech, therefore the Adaptive Leveler has to use a high amplification value in this segment.
In light blue regions, the input signal was very quiet as well, but our classifiers decided that the signal should not be amplified (breathing, noise, background sounds, etc.).

Yellow/orange background segments display leveler fades.

Background Segments: Leveler Fade Up/Down (yellow, orange)
If the volume of an input file changes in a fast way, the Adaptive Leveler volume curve will increase/decrease very fast as well (= fade) and should be placed in speech pauses. Otherwise, if fades are too slow or during active speech, one will hear pumping speech artifacts.
Exact fade regions are plotted as yellow (fade up, volume increase) and orange (fade down, volume decrease) background segments in the audio inspector.

Horizontal red lines display noise and hum reduction profiles.

Horizontal Lines: Noise and Hum Reduction Profiles (red)
Our Noise and Hiss Reduction and Hum Reduction algorithms segment the audio file in regions with different background noise characteristics, which are displayed as red horizontal lines in the audio inspector (top lines for noise reduction, bottom lines for hum reduction).
Then a noise print is extracted in each region and a classifier decides if and how much noise reduction is necessary - this is plotted as a value in dB below the top red line.
The hum base frequency (50Hz or 60Hz) and the strength of all its partials is also classified in each region, the value in Hz above the bottom red line indicates the base frequency and whether hum reduction is necessary or not (no red line).

You can try the singletrack audio inspector yourself with our Leveler, Noise Reduction and Hum Reduction audio examples.

Multitrack Algorithms Inspector

If our Multitrack Post Production Algorithms are used, additional analysis data is shown in the audio inspector.

The audio levels of the output and all input tracks are measured according to the ITU-R BS.1770 specification and are displayed directly as the audio waveform. Click on Show Input to see all the input files with track labels and the output file. Only one file is played at a time, click directly into the track to unmute a file for playback:

Input Tracks: Waveform Segments, Background Segments and Horizontal Lines
Input tracks are displayed below the output file including their track names. The same data as in our Singletrack Algorithms Inspector is calculated and plotted separately in each input track:
Output Waveform Segments: Multiple Speakers and Music
Each speaker is plotted in a separate, blue-like color - in the example above we have 3 speakers (normal, light and dark blue) and you can see directly in the waveform when and which speaker is active.
Audio from music input tracks are always plotted in gold/yellow in the output waveform, please try to not mix music and speech parts in music tracks (see also Multitrack Best Practice)!

You can try the multitrack audio inspector yourself with our Multitrack Audio Inspector Example or our general Multitrack Audio Examples.

Ducking, Background and Foreground Segments

Music tracks can be set to Ducking, Foreground, Background or Auto - for more details please see Automatic Ducking, Foreground and Background Tracks.

Ducking Segments (light, dark orange)
In Ducking, the level of a music track is reduced if one of the speakers is active, which is plotted as a dark orange background segment in the output track.
Foreground music parts, where no speaker is active and the music track volume is not reduced, are displayed as light orange background segments in the output track.
Background Music Segments (dark orange background)
Here the whole music track is set to Background and won’t be amplified when speakers are inactive.
Background music parts are plotted as dark organge background segments in the output track.
Foreground Music Segments (light orange background)
Here the whole music track is set to Foreground and its level won’t be reduced when speakers are active.
Foreground music parts are plotted as light organge background segments in the output track.

You can try the ducking/background/foreground audio inspector yourself: Fore/Background/Ducking Audio Examples.

Audio Search, Chapters Marks and Video

Audio Search and Transcriptions
If our Automatic Speech Recognition Integration is used, a time-aligned transcription text will be shown above the waveform. You can use the search field to search and seek directly in the audio file.
See our Speech Recognition Audio Examples to try it yourself.
Chapters Marks
Chapter Mark start times are displayed in the audio waveform as black vertical lines.
The current chapter title is written above the waveform - see “This is Chapter 2” in the screenshot above.

A video production with output waveform, input waveform and transcriptions in fullscreen mode.
Please click on the screenshot to see it in full resolution.

Video Display
If you add a Video Format or Audiogram Output File to your production, the audio inspector will also show a separate video track in addition to the audio output and input tracks. The video playback will be synced to the audio of output and input tracks.

Supported Audio Formats

We use the native HTML5 audio element for playback and the aurora.js javascript audio decoders to support all common audio formats:

WAV, MP3, AAC/M4A and Opus
These formats are supported in all major browsers: Firefox, Chrome, Safari, Edge, iOS Safari and Chrome for Android.
FLAC
FLAC is supported in Firefox, Chrome, Edge and Chrome for Android - see FLAC audio format.
In Safari and iOS Safari, we use aurora.js to directly decode FLAC files in javascript, which works but uses much more CPU compared to native decoding!
ALAC
ALAC is not supported by any browser so far, therefore we use aurora.js to directly decode ALAC files in javascript. This works but uses much more CPU compared to native decoding!
Ogg Vorbis
Only supported by Firefox, Chrome and Chrome for Android - for details please see Ogg Vorbis audio format.

We suggest to use a recent Firefox or Chrome browser for best performance.
Decoding FLAC and ALAC files also works in Safari and iOS with the help of aurora.js, but javascript decoders need a lot of CPU and they sometimes have problems with exact scrolling and seeking.

Please see our blog post Audio File Formats and Bitrates for Podcasts for more details about audio formats.

Mobile Audio Inspector

Multiple responsive layouts were created to optimize the screen space usage on Android and iOS devices, so that the audio inspector is fully usable on mobile devices as well: tap into the waveform to set the playhead location, scroll horizontally to scroll waveforms, scroll vertically to scroll between tracks, use zoom gestures to zoom in/out, etc.

Unfortunately the fullscreen mode is not available on iOS devices (thanks to Apple), but it works on Android and is a really great way to inspect everything using all the available screen space:

Audio inspector in horizontal fullscreen mode on Android.

Conclusion

Try the Auphonic Audio Inspector yourself: take a look at our Audio Example Page or play with the Multitrack Audio Inspector Example.

The Audio Inspector will be shown in all productions which are created in our Web Service.
It might be used to manually check production result/input files and to send us detailed feedback about audio processing results.

Please let us know if you have some feedback or questions - more visualizations will be added in future!







ea

Advanced Multitrack Audio Algorithms Release (Beta)

Last weekend, at the Subscribe10 conference, we released Advanced Audio Algorithm Parameters for Multitrack Productions:

We launched our advanced audio algorithm parameters for Singletrack Productions last year. Now these settings (and more) are available for Multitrack Algorithms as well, which gives you detailed control for each track of your production.

The following new parameters are available:

Please join our private beta program and let us know how you use these new features or if you need even more control!

Fore/Background Settings

The parameter Fore/Background controls whether a track should be in foreground, in background, ducked, or unchanged, which is especially important for music or clip tracks.
For more details, please see Automatic Ducking, Foreground and Background Tracks .

We now added the new option Unchanged and a new parameter to set the level of background segments/tracks:
Unchanged (Foreground):
We sometimes received complaints from users, which produced very complex music or clip tracks, that Auphonic changes the levels too hard.
If you set the parameter Fore/Background to the new option Unchanged (Foreground), Level relations within this track won’t be changed at all. It will be added to the final mixdown so that foreground/solo parts of this track will be as loud as (foreground) speech from other tracks.
Background Level:
It is now possible to set the level of background segments/tracks (compared to foreground segments) in background and ducking tracks. By default, background and ducking segments are 18dB softer than foreground segments.

Leveler Parameters

Similar to our Singletrack Advanced Leveler Parameters (see this previous blog post), we also released leveling parameters for Multitrack Productions now.
The following advanced parameters for our Multitrack Adaptive Leveler can be set for each track and allow you to customize which parts of the audio should be leveled, how much they should be leveled, how much dynamic range compression should be applied and to set the stereo panorama (balance):

Leveler Preset:
Select the Speech or Music Leveler for this track.
If set to Automatic (default), a classifier will decide if this is a music or speech track.
Dynamic Range:
The parameter Dynamic Range controls how much leveling is applied: Higher values result in more dynamic output audio files (less leveling). If you want to increase the dynamic range by 3dB (or LU), just increase the Dynamic Range parameter by 3dB.
For more details, please see Multitrack Leveler Parameters.
Compressor:
Select a preset for Micro-Dynamics Compression: Auto, Soft, Medium, Hard or Off.
The Compressor adjusts short-term dynamics, whereas the Leveler adjusts mid-term level differences.
For more details, please see Multitrack Leveler Parameters.
Stereo Panorama (Balance):
Change the stereo panorama (balance for stereo input files) of the current track.
Possible values: L100, L75, L50, L25, Center, R25, R50, R75 and R100.

If you understand German and want to know more about our Advanced Leveler Parameters and audio dynamics in general, watch our talk at the Subscribe10 conference:
Video: Audio Lautheit und Dynamik.

Better Hum and Noise Reduction Controls

We now offer three parameters to control the combination of our Multitrack Noise and Hum Reduction Algorithms for each input track:
Noise Reduction Amount:
Maximum noise and hum reduction amount in dB, higher values remove more noise.
In Auto mode, a classifier decides if and how much noise reduction is necessary (to avoid artifacts). Set to a custom (non-Auto) value if you prefer more noise reduction or want to bypass our classifier.
Hum Base Frequency:
Set the hum base frequency to 50Hz or 60Hz (if you know it), or use Auto to automatically detect the hum base frequency in each speech region.
Hum Reduction Amount:
Maximum hum reduction amount in dB, higher values remove more noise.
In Auto mode, a classifier decides how much hum reduction is necessary in each speech region. Set it to a custom value (> 0), if you prefer more hum reduction or want to bypass our classifier. Use Disable Dehum to disable hum reduction and use our noise reduction algorithms only.

Behavior of noise and hum reduction parameter combinations:

Noise Reduction Amount Hum Base Frequency Hum Reduction Amount
Auto Auto Auto Automatic hum and noise reduction
Auto or > 0 * Disabled No hum reduction, only denoise
Disabled 50Hz Auto or > 0 Force 50Hz hum reduction, no denoise
Disabled Auto Auto or > 0 Automatic dehum, no denoise
12dB 60Hz Auto or > 0 Always do dehum (60Hz) and denoise (12dB)

Maximum True Peak Level

In the Master Algorithm Settings of your multitrack production, you can set the maximum allowed true peak level of the processed output file, which is controlled by the True Peak Limiter after our Loudness Normalization algorithms.

If set to Auto (which is the current default), a reasonable value according to the selected loudness target is used: -1dBTP for 23 LUFS (EBU R128) and higher, -2dBTP for -24 LUFS (ATSC A/85) and lower loudness targets.

Full API Support

All advanced algorithm parameters, for Singletrack and Multitrack Productions, are available in our API as well, which allows you to integrate them into your scripts, external workflows and third-party applications.

Singletrack API:
Documentation on how to use the advanced algorithm parameters in our singletrack production API: Advanced Algorithm Parameters
Multitrack API:
Documentation of advanced settings for each track of a multitrack production:
Multitrack Advanced Audio Algorithm Settings

Join the Beta and Send Feedback

Please join our beta and let us know your case studies, if you need any other algorithm parameters or if you have any questions!

Here are some private beta invitation codes:

8tZPc3T9pH VAvO8VsDg9 0TwKXBW4Ni kjXJMivtZ1 J9APmAAYjT Zwm6HabuFw HNK5gF8FR5 Do1MPHUyPW CTk45VbV4t xYOzDkEnWP
9XE4dZ0FxD 0Sl3PxDRho uSoRQxmKPx TCI62OjEYu 6EQaPYs7v4 reIJVOwIr8 7hPJqZmWfw kti3m5KbNE GoM2nF0AcN xHCbDC37O5
6PabLBRm9P j2SoI8peiY olQ2vsmnfV fqfxX4mWLO OozsiA8DWo weJw0PXDky VTnOfOiL6l B6HRr6gil0 so0AvM1Ryy NpPYsInFqm
oFeQPLwG0k HmCOkyaX9R G7DR5Sc9Kv MeQLSUCkge xCSvPTrTgl jyQKG3BWWA HCzWRxSrgW xP15hYKEDl 241gK62TrO Q56DHjT3r4
9TqWVZHZLE aWFMSWcuX8 x6FR5OTL43 Xf6tRpyP4S tDGbOUngU0 5BkOF2I264 cccHS0KveO dT29cF75gG 2ySWlYp1kp iJWPhpAimF
We are happy to send further invitation codes to all interested users - please do not hesitate to contact us!

If you have an invitation code, you can enter it here to activate the Multitrack Advanced Audio Algorithm Parameters:
Auphonic Algorithm Parameters Private Beta Activation







ea

How to Foster Real-Time Client Engagement During Moderated Research

When we conduct moderated research, like user interviews or usability tests, for our clients, we encourage them to observe as many sessions as possible. We find when clients see us interview their users, and get real-time responses, they’re able to learn about the needs of their users in real-time and be more active participants in the process. One way we help clients feel engaged with the process during remote sessions is to establish a real-time communication backchannel that empowers clients to flag responses they’d like to dig into further and to share their ideas for follow-up questions.

There are several benefits to establishing a communication backchannel for moderated sessions:

  • Everyone on the team, including both internal and client team members, can be actively involved throughout the data collection process rather than waiting to passively consume findings.
  • Team members can identify follow-up questions in real-time which allows the moderator to incorporate those questions during the current session, rather than just considering them for future sessions.
  • Subject matter experts can identify more detailed and specific follow-up questions that the moderator may not think to ask.
  • Even though the whole team is engaged, a single moderator still maintains control over the conversation which creates a consistent experience for the participant.

If you’re interested in creating your own backchannel, here are some tips to make the process work smoothly:

  • Use the chat tool that is already being used on the project. In most cases, we use a joint Slack workspace for the session backchannel but we’ve also used Microsoft Teams.
  • Create a dedicated channel like #moderated-sessions. Conversation in this channel should be limited to backchannel discussions during sessions. This keeps the communication consolidated and makes it easier for the moderator to stay focused during the session.
  • Keep communication limited. Channel participants should ask basic questions that are easy to consume quickly. Supplemental commentary and analysis should not take place in the dedicated channel.
  • Use emoji responses. The moderator can add a quick thumbs up to indicate that they’ve seen a question.

Introducing backchannels for communication during remote moderated sessions has been a beneficial change to our research process. It not only provides an easy way for clients to stay engaged during the data collection process but also increases the moderator’s ability to focus on the most important topics and to ask the most useful follow-up questions.




ea

Concurrency & Multithreading in iOS

Concurrency is the notion of multiple things happening at the same time. This is generally achieved either via time-slicing, or truly in parallel if multiple CPU cores are available to the host operating system. We've all experienced a lack of concurrency, most likely in the form of an app freezing up when running a heavy task. UI freezes don't necessarily occur due to the absence of concurrency — they could just be symptoms of buggy software — but software that doesn't take advantage of all the computational power at its disposal is going to create these freezes whenever it needs to do something resource-intensive. If you've profiled an app hanging in this way, you'll probably see a report that looks like this:

Anything related to file I/O, data processing, or networking usually warrants a background task (unless you have a very compelling excuse to halt the entire program). There aren't many reasons that these tasks should block your user from interacting with the rest of your application. Consider how much better the user experience of your app could be if instead, the profiler reported something like this:

Analyzing an image, processing a document or a piece of audio, or writing a sizeable chunk of data to disk are examples of tasks that could benefit greatly from being delegated to background threads. Let's dig into how we can enforce such behavior into our iOS applications.


A Brief History

In the olden days, the maximum amount of work per CPU cycle that a computer could perform was determined by the clock speed. As processor designs became more compact, heat and physical constraints started becoming limiting factors for higher clock speeds. Consequentially, chip manufacturers started adding additional processor cores on each chip in order to increase total performance. By increasing the number of cores, a single chip could execute more CPU instructions per cycle without increasing its speed, size, or thermal output. There's just one problem...

How can we take advantage of these extra cores? Multithreading.

Multithreading is an implementation handled by the host operating system to allow the creation and usage of n amount of threads. Its main purpose is to provide simultaneous execution of two or more parts of a program to utilize all available CPU time. Multithreading is a powerful technique to have in a programmer's toolbelt, but it comes with its own set of responsibilities. A common misconception is that multithreading requires a multi-core processor, but this isn't the case — single-core CPUs are perfectly capable of working on many threads, but we'll take a look in a bit as to why threading is a problem in the first place. Before we dive in, let's look at the nuances of what concurrency and parallelism mean using a simple diagram:

In the first situation presented above, we observe that tasks can run concurrently, but not in parallel. This is similar to having multiple conversations in a chatroom, and interleaving (context-switching) between them, but never truly conversing with two people at the same time. This is what we call concurrency. It is the illusion of multiple things happening at the same time when in reality, they're switching very quickly. Concurrency is about dealing with lots of things at the same time. Contrast this with the parallelism model, in which both tasks run simultaneously. Both execution models exhibit multithreading, which is the involvement of multiple threads working towards one common goal. Multithreading is a generalized technique for introducing a combination of concurrency and parallelism into your program.


The Burden of Threads

A modern multitasking operating system like iOS has hundreds of programs (or processes) running at any given moment. However, most of these programs are either system daemons or background processes that have very low memory footprint, so what is really needed is a way for individual applications to make use of the extra cores available. An application (process) can have many threads (sub-processes) operating on shared memory. Our goal is to be able to control these threads and use them to our advantage.

Historically, introducing concurrency to an app has required the creation of one or more threads. Threads are low-level constructs that need to be managed manually. A quick skim through Apple's Threaded Programming Guide is all it takes to see how much complexity threaded code adds to a codebase. In addition to building an app, the developer has to:

  • Responsibly create new threads, adjusting that number dynamically as system conditions change
  • Manage them carefully, deallocating them from memory once they have finished executing
  • Leverage synchronization mechanisms like mutexes, locks, and semaphores to orchestrate resource access between threads, adding even more overhead to application code
  • Mitigate risks associated with coding an application that assumes most of the costs associated with creating and maintaining any threads it uses, and not the host OS

This is unfortunate, as it adds enormous levels of complexity and risk without any guarantees of improved performance.


Grand Central Dispatch

iOS takes an asynchronous approach to solving the concurrency problem of managing threads. Asynchronous functions are common in most programming environments, and are often used to initiate tasks that might take a long time, like reading a file from the disk, or downloading a file from the web. When invoked, an asynchronous function executes some work behind the scenes to start a background task, but returns immediately, regardless of how long the original task might takes to actually complete.

A core technology that iOS provides for starting tasks asynchronously is Grand Central Dispatch (or GCD for short). GCD abstracts away thread management code and moves it down to the system level, exposing a light API to define tasks and execute them on an appropriate dispatch queue. GCD takes care of all thread management and scheduling, providing a holistic approach to task management and execution, while also providing better efficiency than traditional threads.

Let's take a look at the main components of GCD:

What've we got here? Let's start from the left:

  • DispatchQueue.main: The main thread, or the UI thread, is backed by a single serial queue. All tasks are executed in succession, so it is guaranteed that the order of execution is preserved. It is crucial that you ensure all UI updates are designated to this queue, and that you never run any blocking tasks on it. We want to ensure that the app's run loop (called CFRunLoop) is never blocked in order to maintain the highest framerate. Subsequently, the main queue has the highest priority, and any tasks pushed onto this queue will get executed immediately.
  • DispatchQueue.global: A set of global concurrent queues, each of which manage their own pool of threads. Depending on the priority of your task, you can specify which specific queue to execute your task on, although you should resort to using default most of the time. Because tasks on these queues are executed concurrently, it doesn't guarantee preservation of the order in which tasks were queued.

Notice how we're not dealing with individual threads anymore? We're dealing with queues which manage a pool of threads internally, and you will shortly see why queues are a much more sustainable approach to multhreading.

Serial Queues: The Main Thread

As an exercise, let's look at a snippet of code below, which gets fired when the user presses a button in the app. The expensive compute function can be anything. Let's pretend it is post-processing an image stored on the device.

import UIKit

class ViewController: UIViewController {
    @IBAction func handleTap(_ sender: Any) {
        compute()
    }

    private func compute() -> Void {
        // Pretending to post-process a large image.
        var counter = 0
        for _ in 0..<9999999 {
            counter += 1
        }
    }
}

At first glance, this may look harmless, but if you run this inside of a real app, the UI will freeze completely until the loop is terminated, which will take... a while. We can prove it by profiling this task in Instruments. You can fire up the Time Profiler module of Instruments by going to Xcode > Open Developer Tool > Instruments in Xcode's menu options. Let's look at the Threads module of the profiler and see where the CPU usage is highest.

We can see that the Main Thread is clearly at 100% capacity for almost 5 seconds. That's a non-trivial amount of time to block the UI. Looking at the call tree below the chart, we can see that the Main Thread is at 99.9% capacity for 4.43 seconds! Given that a serial queue works in a FIFO manner, tasks will always complete in the order in which they were inserted. Clearly the compute() method is the culprit here. Can you imagine clicking a button just to have the UI freeze up on you for that long?

Background Threads

How can we make this better? DispatchQueue.global() to the rescue! This is where background threads come in. Referring to the GCD architecture diagram above, we can see that anything that is not the Main Thread is a background thread in iOS. They can run alongside the Main Thread, leaving it fully unoccupied and ready to handle other UI events like scrolling, responding to user events, animating etc. Let's make a small change to our button click handler above:

class ViewController: UIViewController {
    @IBAction func handleTap(_ sender: Any) {
        DispatchQueue.global(qos: .userInitiated).async { [unowned self] in
            self.compute()
        }
    }

    private func compute() -> Void {
        // Pretending to post-process a large image.
        var counter = 0
        for _ in 0..<9999999 {
            counter += 1
        }
    }
}

Unless specified, a snippet of code will usually default to execute on the Main Queue, so in order to force it to execute on a different thread, we'll wrap our compute call inside of an asynchronous closure that gets submitted to the DispatchQueue.global queue. Keep in mind that we aren't really managing threads here. We're submitting tasks (in the form of closures or blocks) to the desired queue with the assumption that it is guaranteed to execute at some point in time. The queue decides which thread to allocate the task to, and it does all the hard work of assessing system requirements and managing the actual threads. This is the magic of Grand Central Dispatch. As the old adage goes, you can't improve what you can't measure. So we measured our truly terrible button click handler, and now that we've improved it, we'll measure it once again to get some concrete data with regards to performance.

Looking at the profiler again, it's quite clear to us that this is a huge improvement. The task takes an identical amount of time, but this time, it's happening in the background without locking up the UI. Even though our app is doing the same amount of work, the perceived performance is much better because the user will be free to do other things while the app is processing.

You may have noticed that we accessed a global queue of .userInitiated priority. This is an attribute we can use to give our tasks a sense of urgency. If we run the same task on a global queue of and pass it a qos attribute of background , iOS will think it's a utility task, and thus allocate fewer resources to execute it. So, while we don't have control over when our tasks get executed, we do have control over their priority.

A Note on Main Thread vs. Main Queue

You might be wondering why the Profiler shows "Main Thread" and why we're referring to it as the "Main Queue". If you refer back to the GCD architecture we described above, the Main Queue is solely responsible for managing the Main Thread. The Dispatch Queues section in the Concurrency Programming Guide says that "the main dispatch queue is a globally available serial queue that executes tasks on the application’s main thread. Because it runs on your application’s main thread, the main queue is often used as a key synchronization point for an application."

The terms "execute on the Main Thread" and "execute on the Main Queue" can be used interchangeably.


Concurrent Queues

So far, our tasks have been executed exclusively in a serial manner. DispatchQueue.main is by default a serial queue, and DispatchQueue.global gives you four concurrent dispatch queues depending on the priority parameter you pass in.

Let's say we want to take five images, and have our app process them all in parallel on background threads. How would we go about doing that? We can spin up a custom concurrent queue with an identifier of our choosing, and allocate those tasks there. All that's required is the .concurrent attribute during the construction of the queue.

class ViewController: UIViewController {
    let queue = DispatchQueue(label: "com.app.concurrentQueue", attributes: .concurrent)
    let images: [UIImage] = [UIImage].init(repeating: UIImage(), count: 5)

    @IBAction func handleTap(_ sender: Any) {
        for img in images {
            queue.async { [unowned self] in
                self.compute(img)
            }
        }
    }

    private func compute(_ img: UIImage) -> Void {
        // Pretending to post-process a large image.
        var counter = 0
        for _ in 0..<9999999 {
            counter += 1
        }
    }
}

Running that through the profiler, we can see that the app is now spinning up 5 discrete threads to parallelize a for-loop.

Parallelization of N Tasks

So far, we've looked at pushing computationally expensive task(s) onto background threads without clogging up the UI thread. But what about executing parallel tasks with some restrictions? How can Spotify download multiple songs in parallel, while limiting the maximum number up to 3? We can go about this in a few ways, but this is a good time to explore another important construct in multithreaded programming: semaphores.

Semaphores are signaling mechanisms. They are commonly used to control access to a shared resource. Imagine a scenario where a thread can lock access to a certain section of the code while it executes it, and unlocks after it's done to let other threads execute the said section of the code. You would see this type of behavior in database writes and reads, for example. What if you want only one thread writing to a database and preventing any reads during that time? This is a common concern in thread-safety called Readers-writer lock. Semaphores can be used to control concurrency in our app by allowing us to lock n number of threads.

let kMaxConcurrent = 3 // Or 1 if you want strictly ordered downloads!
let semaphore = DispatchSemaphore(value: kMaxConcurrent)
let downloadQueue = DispatchQueue(label: "com.app.downloadQueue", attributes: .concurrent)

class ViewController: UIViewController {
    @IBAction func handleTap(_ sender: Any) {
        for i in 0..<15 {
            downloadQueue.async { [unowned self] in
                // Lock shared resource access
                semaphore.wait()

                // Expensive task
                self.download(i + 1)

                // Update the UI on the main thread, always!
                DispatchQueue.main.async {
                    tableView.reloadData()

                    // Release the lock
                    semaphore.signal()
                }
            }
        }
    }

    func download(_ songId: Int) -> Void {
        var counter = 0

        // Simulate semi-random download times.
        for _ in 0..<Int.random(in: 999999...10000000) {
            counter += songId
        }
    }
}

Notice how we've effectively restricted our download system to limit itself to k number of downloads. The moment one download finishes (or thread is done executing), it decrements the semaphore, allowing the managing queue to spawn another thread and start downloading another song. You can apply a similar pattern to database transactions when dealing with concurrent reads and writes.

Semaphores usually aren't necessary for code like the one in our example, but they become more powerful when you need to enforce synchronous behavior whille consuming an asynchronous API. The above could would work just as well with a custom NSOperationQueue with a maxConcurrentOperationCount, but it's a worthwhile tangent regardless.


Finer Control with OperationQueue

GCD is great when you want to dispatch one-off tasks or closures into a queue in a 'set-it-and-forget-it' fashion, and it provides a very lightweight way of doing so. But what if we want to create a repeatable, structured, long-running task that produces associated state or data? And what if we want to model this chain of operations such that they can be cancelled, suspended and tracked, while still working with a closure-friendly API? Imagine an operation like this:

This would be quite cumbersome to achieve with GCD. We want a more modular way of defining a group of tasks while maintaining readability and also exposing a greater amount of control. In this case, we can use Operation objects and queue them onto an OperationQueue, which is a high-level wrapper around DispatchQueue. Let's look at some of the benefits of using these abstractions and what they offer in comparison to the lower-level GCI API:

  • You may want to create dependencies between tasks, and while you could do this via GCD, you're better off defining them concretely as Operation objects, or units of work, and pushing them onto your own queue. This would allow for maximum reusability since you may use the same pattern elsewhere in an application.
  • The Operation and OperationQueue classes have a number of properties that can be observed, using KVO (Key Value Observing). This is another important benefit if you want to monitor the state of an operation or operation queue.
  • Operations can be paused, resumed, and cancelled. Once you dispatch a task using Grand Central Dispatch, you no longer have control or insight into the execution of that task. The Operation API is more flexible in that respect, giving the developer control over the operation's life cycle.
  • OperationQueue allows you to specify the maximum number of queued operations that can run simultaneously, giving you a finer degree of control over the concurrency aspects.

The usage of Operation and OperationQueue could fill an entire blog post, but let's look at a quick example of what modeling dependencies looks like. (GCD can also create dependencies, but you're better off dividing up large tasks into a series of composable sub-tasks.) In order to create a chain of operations that depend on one another, we could do something like this:

class ViewController: UIViewController {
    var queue = OperationQueue()
    var rawImage = UIImage? = nil
    let imageUrl = URL(string: "https://example.com/portrait.jpg")!
    @IBOutlet weak var imageView: UIImageView!

    let downloadOperation = BlockOperation {
        let image = Downloader.downloadImageWithURL(url: imageUrl)
        OperationQueue.main.async {
            self.rawImage = image
        }
    }

    let filterOperation = BlockOperation {
        let filteredImage = ImgProcessor.addGaussianBlur(self.rawImage)
        OperationQueue.main.async {
            self.imageView = filteredImage
        }
    }

    filterOperation.addDependency(downloadOperation)

    [downloadOperation, filterOperation].forEach {
        queue.addOperation($0)
     }
}

So why not opt for a higher level abstraction and avoid using GCD entirely? While GCD is ideal for inline asynchronous processing, Operation provides a more comprehensive, object-oriented model of computation for encapsulating all of the data around structured, repeatable tasks in an application. Developers should use the highest level of abstraction possible for any given problem, and for scheduling consistent, repeated work, that abstraction is Operation. Other times, it makes more sense to sprinkle in some GCD for one-off tasks or closures that we want to fire. We can mix both OperationQueue and GCD to get the best of both worlds.


The Cost of Concurrency

DispatchQueue and friends are meant to make it easier for the application developer to execute code concurrently. However, these technologies do not guarantee improvements to the efficiency or responsiveness in an application. It is up to you to use queues in a manner that is both effective and does not impose an undue burden on other resources. For example, it's totally viable to create 10,000 tasks and submit them to a queue, but doing so would allocate a nontrivial amount of memory and introduce a lot of overhead for the allocation and deallocation of operation blocks. This is the opposite of what you want! It's best to profile your app thoroughly to ensure that concurrency is enhancing your app's performance and not degrading it.

We've talked about how concurrency comes at a cost in terms of complexity and allocation of system resources, but introducing concurrency also brings a host of other risks like:

  • Deadlock: A situation where a thread locks a critical portion of the code and can halt the application's run loop entirely. In the context of GCD, you should be very careful when using the dispatchQueue.sync { } calls as you could easily get yourself in situations where two synchronous operations can get stuck waiting for each other.
  • Priority Inversion: A condition where a lower priority task blocks a high priority task from executing, which effectively inverts their priorities. GCD allows for different levels of priority on its background queues, so this is quite easily a possibility.
  • Producer-Consumer Problem: A race condition where one thread is creating a data resource while another thread is accessing it. This is a synchronization problem, and can be solved using locks, semaphores, serial queues, or a barrier dispatch if you're using concurrent queues in GCD.
  • ...and many other sorts of locking and data-race conditions that are hard to debug! Thread safety is of the utmost concern when dealing with concurrency.

Parting Thoughts + Further Reading

If you've made it this far, I applaud you. Hopefully this article gives you a lay of the land when it comes to multithreading techniques on iOS, and how you can use some of them in your app. We didn't get to cover many of the lower-level constructs like locks, mutexes and how they help us achieve synchronization, nor did we get to dive into concrete examples of how concurrency can hurt your app. We'll save those for another day, but you can dig into some additional reading and videos if you're eager to dive deeper.




ea

African American Women Leading in Tech

“Close your eyes and name three people who have impacted the tech industry.”

In all likelihood, that list might be overwhelmingly white and male.

And you are not alone. Numerous lists online yielded the same results. In recent years, many articles have chronicled the dearth of diversity in tech. Studies have shown the ways in which venture capital firms have systematically underestimated and undervalued innovation coming particularly from women of color. In 2016 only 88 tech startups were led by African American women, in 2018 this number had climbed to a little over 200. Between 2009 and 2017, African American women raised $289MM in venture/angel funding. For perspective, this only represents .0006% of the $424.7B in total tech venture funding raised in that same time frame. In 2018, only 34 African American women had ever raised more than a million in venture funding.

When it comes to innovation, it is not unusual for financial value to be the biggest predictor of what is considered innovative. In fact, a now largely controversial list posted by Forbes of America’s most innovative leaders in the fall of 2019 featured 99 men and one woman. Ironically, what was considered innovative was, in fact, very traditional in its presentation. The criteria used for the list was “media reputation for innovation,” social connections, a track record for value creation, and investor expectations for value creation.

The majority of African American women-led startups raise $42,000 from largely informal networks. Criteria weighted on the side of ‘track record for value creation’ and ‘investor expectations for value creation’ devalues the immense contributions of African American women leading the charge on thoughtful and necessary tech. Had Forbes used criteria for innovation that recognized emergent leadership, novel problem-solving, or original thinking outside the circles of already well-known and well-established entrepreneurs we might have learned something new. Instead, we're basically reminded that "it takes money to make money."

Meanwhile, African American women are the fastest-growing demographic of entrepreneurs in the United States. Their contributions to tech, amongst other fields, are cementing the importance of African American women in the innovation space. And they are doing this within and outside traditional tech frameworks. By becoming familiar with these entrepreneurs and their work, we can elevate their reputation and broaden our collective recognition of innovative leaders.

In honor of black history month, we have compiled a list of African American women founders leading the way in tech innovation from Alabama to the Bay Area. From rethinking energy to debt forgiveness platforms these women are crossing boundaries in every field.

Cultivating New Leaders

Photo of Kathryn Finney, courtesy of Forbes.com.

Kathryn Finney founder of Digitalundivided
Kathryn A. Finney is an American author, researcher, investor, entrepreneur, innovator and businesswoman. She is the founder and CEO of digitalundivided, a social enterprise that leads high potential Black and Latinx women founders through the startup pipeline from idea to exit.

Laura Weidman Co-founder Code2040
Laura Weidman Powers is the co-founder and executive director of Code2040, a nonprofit that creates access, awareness, and opportunities for minority engineering talent to ensure their leadership in the innovation economy.

Angelica Ross founder of TransTech Social Enterprises
Angelica Ross is an American businesswoman, actress, and transgender rights advocate. After becoming a self-taught computer coder, she went on to become the founder and CEO of TransTech Social Enterprises, a firm that helps employ transgender people in the tech industry.

Christina Souffrant Ntim co-founder of Global Startup Ecosystem
Christina Souffrant Ntim is the co-founder of award-winning digital accelerator platform – Global Startup Ecosystem which graduates over 1000+ companies across 90+ countries a year.

Media and Entertainment

Bryanda Law founder of Quirktastic
Bryanda Law is the founder of Quirktastic, a modern media-tech company on a mission to grow the largest and most authentically engaged community of fandom-loving people of color.

Morgan Debaun founder of Blavity Inc.
Morgan DeBaun is an African American entrepreneur. She is the Founder and CEO of Blavity Inc., a portfolio of brands and websites created by and for black millennials

Cheryl Contee co-founder of Do Big Things
Cheryl Contee is the award-winning CEO and co-founder of Do Big Things, a digital agency that creates new narratives and tech for a new era focused on causes and campaigns.

Photo of Farah Allen, courtesy of The Source Magazine.

Farah Allen founder of The Labz
Farah Allen is the CEO and founder of The Labz, a collaborative workspace that provides automated tracking, rights management, protection—using Blockchain technology—of your music files during and after you create them.

Health/Wellness

Mara Lidey co-founder of Shine
Marah Lidey is the co-founder & co-CEO of Shine. Shine aims to reinvent health and wellness for millennials through messaging technology.

Alicia Thomas co-founder of Dibs
Alicia Thomas is the founder and CEO of Dibs, a B2B digital platform that gives studios quick and easy access to real-time pricing for fitness classes.

Photo of Erica Plybeah, courtesy of BetterTennessee.com

Erica Plybeah Hemphill founder of MedHaul
Erica Plybeah Hemphill is the founder of MedHaul. MedHaul offers cloud-based solutions that ease the burdens of managing patient transportation.

Star Cunningham founder of 4D Healthware
Star Cunningham is the founder and CEO of 4D Healthware. 4D Healthware is patient engagement software that makes personalized medicine possible through connected data.

Kimberly Wilson founder of HUED
Kimberly Wilson is the founder of HUED. HUED is a healthcare technology startup that helps patients find and book appointments with Black and Latinx healthcare providers.

Financial

Viola Llewellyn co-founder of Ovamba Solutions
Viola Llewellyn is the co-founder and the president of Ovamba Solutions, a US-based fintech company that provides micro, small, and medium enterprises in Africa and the Middle East with microfinance through a mobile platform.

NanaEfua Baidoo Afoh-Manin, Briana DeCuir and Joanne Moreau founders of Shared Harvest Fund
NanaEfua, Briana and Joanne are the founders of Shared Harvest Fund. Shared Harvest Fund provides real opportunities for talented people to volunteer away their student loans.

Photo of Sheena Allen, courtesy of People of Color in Tech.

Sheena Allen founder of CapWay
Sheena Allen is best known as the founder and CEO of fintech company and mobile bank CapWay.

Education

Helen Adeosun co-founder of CareAcademy
Helen Adeosun is the co-founder, president and CEO of CareAcademy, a start-up dedicated to professionalizing caregiving through online classes. CareAcademy brings professional development to caregivers at all levels.

Alexandra Bernadotte founder of Beyond 12
Alex Bernadotte is the founder and chief executive officer of Beyond 12, a nonprofit that integrates personalized coaching with intelligent technology to increase the number of traditionally underserved students who earn a college degree.

Shani Dowell founder of Possip
Shani Dowell is the founder of Possip, a platform that simplifies feedback between parents, schools and districts. Learn more at possipit.com.

Kaya Thomas of We Read Too
Kaya Thomas is an American computer scientist, app developer and writer. She is the creator of We Read Too, an iOS app that helps readers discover books for and by people of color.

Kimberly Gray founder of Uvii
Kimberly Gray is the founder of Uvii. Uvii helps students to communicate and collaborate on mobile with video, audio, and text

Nicole Neal co-founder of ProcureK12 by Noodle Markets
Nicole Neal is the co-founder and CEO of ProcureK12 by Noodle Markets. ProcureK12 makes purchasing for education simple. They combine a competitive school supply marketplace with quote request tools and bid management.

Beauty/Fashion/Consumer goods

Regina Gwyn founder of TresseNoire
Regina Gwynn is the co-founder & CEO of TresseNoire, the leading on-location beauty booking app designed for women of color in New York City and Philadelphia.

Camille Hearst co-founder of Kit.
Camille Hearst is the CEO and co-founder of Kit. Kit lets experts create shoppable collections of products so their followers can buy and the experts can make some revenue from what they share.

Photo of Esosa Ighodaro courtesy of Under30CEO.

Esosa Ighodaro co-founder of CoSign Inc.
Esosa Ighodaro is the co-founder of CoSign Inc., which was founded in 2013. CoSign is a mobile application that transfers social media content into commerce giving cash for endorsing and cosigning products and merchandise like clothing, home goods, technology and more.

Environment

Jessica Matthews founder of Uncharted Power
Jessica O. Matthews is a Nigerian-American inventor, CEO and venture capitalist. She is the co-founder of Uncharted Power, which made Soccket, a soccer ball that can be used as a power generator.

Etosha Cave co-founder of Opus 12
Etosha R. Cave is an American mechanical engineer based in Berkeley, California. She is the Co-Founder and Chief Scientific Officer of Opus 12, a startup that recycles carbon dioxide.

Kellee James founder of Mercaris, Inc.
Kellee James is the founder and CEO of Mercaris, Inc., a growing, minority-led start-up that makes efficient trading of organic and non-GMO commodities possible via market data service exchanges and trading platforms.

Workplace

Photo of Lisa Skeete Tatum courtesy of The Philadelphia Citezen.

Lisa Skeete Tatum founder of Landit
Lisa Skeete Tatum is the founder and CEO of Landit, a technology platform created to increase the success and engagement of women in the workplace, and to enable companies to attract, develop, and retain high-potential, diverse talent.

Netta Jenkins and Jacinta Mathis founders of Dipper
Netta Jenkins and Jacinta Mathis are founders of Dipper, a platform that acts as a safe digital space for individuals of color in the workplace.

Sherisse Hawkins founder of Pagedip
Sherisse Hawkins is the visionary and founder of Pagedip. Pagedip is a cloud-based software solution that allows you to bring depth to digital documents, enabling people to read (text), watch (video) and do (interact) all in the same place without ever having to leave the page.

Thkisha DeDe Sanogo founder of MyTAASK
Thkisha DeDe Sanogo is the founder of MyTAASK. MyTAASK is a personal planning platform dedicated to getting stuff done in real-time.

Home

Photo of Jean Brownhill, courtesy of Quartz at Work.

Jean Brownhill founder of Sweeten 
Jean Brownhill is the founder and CEO of Sweeten, an award-winning service that helps homeowners and business owners find and manage the best vetted general contractors for major renovation projects.

Reham Fagiri co-founder of AptDeco
Reham Fagiri is the co-founder of AptDeco. AptDeco is an online marketplace for buying and selling quality preowned furniture with pick up and delivery built into the service.

Stephanie Cummings founder of Please Assist Me
Stephanie Cummings is the founder and CEO of Please Assist me. Please Assist Me is an apartment task service in Nashville, TN. The organization empowers working professionals by allowing them to outsource their weekly chores to their own personal team.

Law

Kristina Jones co-founder of Court Buddy
Kristina Jones is the co-founder of Court Buddy, a service that matches clients with lawyers.

Sonja Ebron and Debra Slone founders of Courtroom5
Sonja Ebron and Debra Slone are the founders of Courtroom5. Courtroom5 helps you represent yourself in court with tools, training, and community designed for pro se litigants.

Crowdfunding

Zuley Clarke founder of Business Gift Registry
Zuley Clarke is the founder of Business Gift Registry, a crowdfunding platform that lets friends and family support an entrepreneur through gift-giving just like they would support a couple for a wedding.



  • News & Culture

ea

Committed to the wrong branch? -, @{upstream}, and @{-1} to the rescue

I get into this situation sometimes. Maybe you do too. I merge feature work into a branch used to collect features, and then continue development but on that branch instead of back on the feature branch

git checkout feature
# ... bunch of feature commits ...
git push
git checkout qa-environment
git merge --no-ff --no-edit feature
git push
# deploy qa-environment to the QA remote environment
# ... more feature commits ...
# oh. I'm not committing in the feature branch like I should be

and have to move those commits to the feature branch they belong in and take them out of the throwaway accumulator branch

git checkout feature
git cherry-pick origin/qa-environment..qa-environment
git push
git checkout qa-environment
git reset --hard origin/qa-environment
git merge --no-ff --no-edit feature
git checkout feature
# ready for more feature commits

Maybe you prefer

git branch -D qa-environment
git checkout qa-environment

over

git checkout qa-environment
git reset --hard origin/qa-environment

Either way, that works. But it'd be nicer if we didn't have to type or even remember the branches' names and the remote's name. They are what is keeping this from being a context-independent string of commands you run any time this mistake happens. That's what we're going to solve here.

Shorthands for longevity

I like to use all possible natively supported shorthands. There are two broad motivations for that.

  1. Fingers have a limited number of movements in them. Save as many as possible left late in life.
  2. Current research suggests that multitasking has detrimental effects on memory. Development tends to be very heavy on multitasking. Maybe relieving some of the pressure on quick-access short term memory (like knowing all relevant branch names) add up to leave a healthier memory down the line.

First up for our scenario: the - shorthand, which refers to the previously checked out branch. There are a few places we can't use it, but it helps a lot:

Bash
# USING -

git checkout feature
# hack hack hack
git push
git checkout qa-environment
git merge --no-ff --no-edit -        # ????
git push
# hack hack hack
# whoops
git checkout -        # now on feature ???? 
git cherry-pick origin/qa-environment..qa-environment
git push
git checkout - # now on qa-environment ????
git reset --hard origin/qa-environment
git merge --no-ff --no-edit -        # ????
git checkout -                       # ????
# on feature and ready for more feature commits
Bash
# ORIGINAL

git checkout feature
# hack hack hack
git push
git checkout qa-environment
git merge --no-ff --no-edit feature
git push
# hack hack hack
# whoops
git checkout feature
git cherry-pick origin/qa-environment..qa-environment
git push
git checkout qa-environment
git reset --hard origin/qa-environment
git merge --no-ff --no-edit feature
git checkout feature
# ready for more feature commits

We cannot use - when cherry-picking a range

> git cherry-pick origin/-..-
fatal: bad revision 'origin/-..-'

> git cherry-pick origin/qa-environment..-
fatal: bad revision 'origin/qa-environment..-'

and even if we could we'd still have provide the remote's name (here, origin).

That shorthand doesn't apply in the later reset --hard command, and we cannot use it in the branch -D && checkout approach either. branch -D does not support the - shorthand and once the branch is deleted checkout can't reach it with -:

# assuming that branch-a has an upstream origin/branch-a
> git checkout branch-a
> git checkout branch-b
> git checkout -
> git branch -D -
error: branch '-' not found.
> git branch -D branch-a
> git checkout -
error: pathspec '-' did not match any file(s) known to git

So we have to remember the remote's name (we know it's origin because we are devoting memory space to knowing that this isn't one of those times it's something else), the remote tracking branch's name, the local branch's name, and we're typing those all out. No good! Let's figure out some shorthands.

@{-<n>} is hard to say but easy to fall in love with

We can do a little better by using @{-<n>} (you'll also sometimes see it referred to be the older @{-N}). It is a special construct for referring to the nth previously checked out ref.

> git checkout branch-a
> git checkout branch-b
> git rev-parse --abbrev-rev @{-1} # the name of the previously checked out branch
branch-a
> git checkout branch-c
> git rev-parse --abbrev-rev @{-2} # the name of branch checked out before the previously checked out one
branch-a

Back in our scenario, we're on qa-environment, we switch to feature, and then want to refer to qa-environment. That's @{-1}! So instead of

git cherry-pick origin/qa-environment..qa-environment

We can do

git cherry-pick origin/qa-environment..@{-1}

Here's where we are (🎉 marks wins from -, 💥 marks the win from @{-1})

Bash
# USING - AND @{-1}

git checkout feature
# hack hack hack
git push
git checkout qa-environment
git merge --no-ff --no-edit -                # ????
git push
# hack hack hack
# whoops
git checkout -                               # ????
git cherry-pick origin/qa-environment..@{-1} # ????
git push
git checkout -                               # ????
git reset --hard origin/qa-environment
git merge --no-ff --no-edit -                # ????
git checkout -                               # ????
# ready for more feature commits
Bash
# ORIGINAL

git checkout feature
# hack hack hack
git push
git checkout qa-environment
git merge --no-ff --no-edit feature
git push
# hack hack hack
# whoops
git checkout feature
git cherry-pick origin/qa-environment..qa-environment
git push
git checkout qa-environment
git reset --hard origin/qa-environment
git merge --no-ff --no-edit feature
git checkout feature
# ready for more feature commits

One down, two to go: we're still relying on memory for the remote's name and the remote branch's name and we're still typing both out in full. Can we replace those with generic shorthands?

@{-1} is the ref itself, not the ref's name, we can't do

> git cherry-pick origin/@{-1}..@{-1}
origin/@{-1}
fatal: ambiguous argument 'origin/@{-1}': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

because there is no branch origin/@{-1}. For the same reason, @{-1} does not give us a generalized shorthand for the scenario's later git reset --hard origin/qa-environment command.

But good news!

Do @{u} @{push}

@{upstream} or its shorthand @{u} is the remote branch a that would be pulled from if git pull were run. @{push} is the remote branch that would be pushed to if git push was run.

> git checkout branch-a
Switched to branch 'branch-a'
Your branch is ahead of 'origin/branch-a' by 3 commits.
  (use "git push" to publish your local commits)
> git reset --hard origin/branch-a
HEAD is now at <the SHA origin/branch-a is at>

we can

> git checkout branch-a
Switched to branch 'branch-a'
Your branch is ahead of 'origin/branch-a' by 3 commits.
  (use "git push" to publish your local commits)
> git reset --hard @{u}                                # <-- So Cool!
HEAD is now at <the SHA origin/branch-a is at>

Tacking either onto a branch name will give that branch's @{upstream} or @{push}. For example

git checkout branch-a@{u}

is the branch branch-a pulls from.

In the common workflow where a branch pulls from and pushes to the same branch, @{upstream} and @{push} will be the same, leaving @{u} as preferable for its terseness. @{push} shines in triangular workflows where you pull from one remote and push to another (see the external links below).

Going back to our scenario, it means short, portable commands with a minimum human memory footprint. (🎉 marks wins from -, 💥 marks the win from @{-1}, 😎 marks the wins from @{u}.)

Bash
# USING - AND @{-1} AND @{u}

git checkout feature
# hack hack hack
git push
git checkout qa-environment
git merge --no-ff --no-edit -    # ????
git push
# hack hack hack
# whoops
git checkout -                   # ????
git cherry-pick @{-1}@{u}..@{-1} # ????????
git push
git checkout -                   # ????
git reset --hard @{u}            # ????
git merge --no-ff --no-edit -    # ????
git checkout -                   # ????
# ready for more feature commits
Bash
# ORIGINAL

git checkout feature
# hack hack hack
git push
git checkout qa-environment
git merge --no-ff --no-edit feature
git push
# hack hack hack
# whoops
git checkout feature
git cherry-pick origin/qa-environment..qa-environment
git push
git checkout qa-environment
git reset --hard origin/qa-environment
git merge --no-ff --no-edit feature
git checkout feature
# ready for more feature commits

Make the things you repeat the easiest to do

Because these commands are generalized, we can run some series of them once, maybe

git checkout - && git reset --hard @{u} && git checkout -

or

git checkout - && git cherry-pick @{-1}@{u}.. @{-1} && git checkout - && git reset --hard @{u} && git checkout -

and then those will be in the shell history just waiting to be retrieved and run again the next time, whether with CtrlR incremental search or history substring searching bound to the up arrow or however your interactive shell is configured. Or make it an alias, or even better an abbreviation if your interactive shell supports them. Save the body wear and tear, give memory a break, and level up in Git.

And keep going

The GitHub blog has a good primer on triangular workflows and how they can polish your process of contributing to external projects.

The FreeBSD Wiki has a more in-depth article on triangular workflow process (though it doesn't know about @{push} and @{upstream}).

The construct @{-<n>} and the suffixes @{push} and @{upstream} are all part of the gitrevisions spec. Direct links to each:



    • Code
    • Front-end Engineering
    • Back-end Engineering