k

Scenic designer in Iowa City looks for light in the darkness

Benjamin Stuben Farrar of Iowa City is a storyteller without a story to tell at the moment.

The first story is as dramatic and layered as his bold scenic and lighting designs for area stages: “Benjamin Stuben Farrar” is not his actual name.

He was born Stewart Benjamin Farrar 41 years ago in Kentucky. He didn’t want to go through life as “Stewie,” so he went by “Benjamin,” until he got to college at Vanderbilt University in Nashville. He ran into so many other Bens, that his buddies decided to combine his names into “Stuben.”

That name followed him to grad school at the University of Iowa in 2002, where he earned an MFA in theater design. But when he moved to New York City in 2006 to pursue his career, he didn’t like hearing “Stuben” shouted across the theater.

“It sounded too much like ‘stupid,’ ” he said, “so I reverted back to Benjamin.”

But nicknames have a way of sticking. When he and his wife moved back to Iowa City in 2015 to raise their daughter, he switched to “Stuben” again, since that’s how people knew him there.

Professionally, he uses “S. Benjamin Farrar” and on Facebook, he goes by “Benjamin Stuben Farrar” so friends from his various circles can find him. Even though most people now call him “Stuben,” he still introduces himself as “Benjamin.”

“To this day, I have 12 different names,” he said with a laugh. “Only the bill collectors know me as ‘Stewart.’”

Changing realms

Like his name, his artistry knows no bounds.

He has planted apple trees on Riverside Theatre’s indoor stage in Iowa City; a child’s outdoor playground on the Theatre Cedar Rapids stage; and dramatic spaces for Noche Flamenca’s dancers in New York City venues and on tour.

These days, however, his theatrical world has gone dark.

His recent designs for “The Humans,” “The Skin of Our Teeth” and “Kinky Boots” at Theatre Cedar Rapids and “A Doll’s House, Part 2” at Riverside Theatre have been canceled or postponed in the wake of the coronavirus pandemic. He has “The Winter’s Tale” in the works for Riverside Theatre’s free Shakespeare in the Park slated for June, but time will tell if that changes, too.

“Within the course of two weeks, five productions were canceled or moved indefinitely,” he said.

Looking ahead, he’s not sure what shows he’ll have time to design for the upcoming seasons. He’s used to juggling three or four productions at a time, but he said that could become really difficult if the shows fall on top of each other at the various venues.

As with so many artists right now, his world keeps changing.

He and his wife, Jody Caldwell, an editor and graduate of the UI Writers’ Workshop, are both freelancers, leaving them with no income during this pandemic. So Farrar has been wading through red tape and delays to secure unemployment compensation and the government stimulus check, for which he’s still waiting. One bright spot was receiving a $1,000 Iowa Arts & Culture Emergency Relief Fund grant given to 156 Iowa creatives who have lost income from canceled projects.

With his regular revenue streams drying up, he’s been considering other ways to earn money through teaching theater or creating and selling more of his digital and film photography — an outgrowth of his fascination for the way lighting can sculpt a scene on stage.

“I love doing nature (photography). I love doing details,” he said. “I love photographing people, too, especially on stage — I love photographing my own shows. It’s just a lot of fun.

“For me, nature’s so interesting, especially living where we do in North America, there’s vast changes from one time of year to another. I just love looking at that on a very small scale, and how light happens to fall on that particular surface — how that surface changes color,” he said.

“Right now the redbuds are out. The magnolias came out two weeks ago and then they started to fall. It changes the landscape dramatically, especially based on whether it’s a morning light or afternoon light or evening light, whether it’s cloudy, whether the sun’s peeking through clouds and highlighting a few individual leaves. I find that super fascinating.

“That’s how I can look at the same boring tree at different times of year, at different times of day, and find something interesting to photograph.”

Lighting design

While his scenic designs create an immediate visual impact and help tell the story swirling around the actors, Farrar was a lighting designer before he became a scenic designer.

It wasn’t love at first sight. He took a light design course in college, but didn’t “get” it.

“It’s really difficult to wrap your head around it,” he said.

His aha moment came when he was running lights for an operetta in college.

“I just had these little faders in front of me so I could raise certain lights up and down. And the music was happening in front of me and I thought, ‘I control this whole little universe. I can make things completely disappear. I can sculpt things from the side, I can make things feel totally different — just like music can — just based on how it’s lit.’ And then I finally started to understand how the lighting hooked things together,” he said.

From there, his interest in lighting soared.

“I absolutely love lighting,” he said. “I think it’s probably given me more joy than anything else, just because I can go for a walk someplace and just the way the lighting changes as the clouds come in or out, or as the time of year changes and the angle of the sun changes, I really enjoy seeing that — and that’s what got me into photography.”

Scenic design

While his design work is a collaborative process with the director and other production team members, the ideas begin flowing as soon as he starts reading a script. With the flamenco dance company in New York, he might start working on a show two years in advance. With Theatre Cedar Rapids, the lead time is generally six months to look at the season overall, and four months to “get things going” on a particular show, he said. The lead time is about two months for Riverside Theatre shows, which have shorter rehearsal periods.

He begins thinking about the theater spaces, the text that the audience never sees, the show’s technical demands, and the scale in relation to the human body. He still likes to do some of his design work by hand, but computers and the 3D printer he has in his basement workshop have made the process much quicker for creating the drawings and scale models for each show.

He also enjoys the variety and challenge of moving between the small space inside Riverside Theatre and the large space inside Theatre Cedar Rapids, as well as the theaters at Grinnell College and Cornell College in Mount Vernon, as well as the theaters in New York and the touring venues that have housed his designs.

Ultimately, the goal of scenic design “is always about the storytelling,” he said.

“There’s a version of a show that exists in a script, if there is a script. Assuming it has a script, there is a scaffolding for that show in the script, and then there’s a version of the show in the director’s head, and then there’s a version of the show that’s performed in my head as I read the script. So there’s all these different versions.”

If the show is a musical, the choreographer brings in another idea, and the musical score adds another element. Sometimes Farrar knows the music very well, but other times, he doesn’t.

“Hopefully, I can integrate that well if I listen to the music while working on the show — not usually when I’m reading the script, but while I’m drafting the show. I’ll listen to the music to get a sense of how the show wants to move.

“Integrating all these different versions of the show — the text, what’s in my head, what’s in the director’s head, what’s in the choreographer’s head, the role the music plays — and then you synthesize all those elements, and then you find out how the show wants to move in the space it has. And how a show moves is one of the most important things to me. ...

“You get a sense that the show becomes this conscious element that wants a certain thing, and will reveal those things over time.”

And time is something he has right now.

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



  • Arts & Culture

k

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.”




k

Task force will make recommendations on how to resume jury trials, given coronavirus concerns

DES MOINES — The Iowa Supreme Court has asked a group of criminal and civil lawyers, judges and court staff from judicial districts across the state to make recommendations on how criminal and civil jury trials will resume with coronavirus health restrictions.

The court is asking the 17-member Jumpstart Jury Trials Task Force to develop temporary policies and procedures for jury trials that will ensure the “fundamental rights of a defendant” to a jury trial, while at the same time “protecting the health and safety” of the jurors, attorneys, judges and the public, said Des Moines lawyer Guy Cook, co-chairman of the task force.

The court, Cook said Thursday, has put together a “good cross-section” of professionals who have experience with civil and criminal trials.

Task force members are:

• Associate Supreme Court Justice Mark McDermott, chairman

• Guy Cook, Des Moines criminal and civil attorney, co-chairman

• 4th Judicial District Judge Michael Hooper

• 5th Judicial District Judge David Porter

• Angela Campbell, Des Moines criminal defense attorney

• Jim Craig, Cedar Rapids civil attorney, president of Iowa Defense Counsel Association

• Janietta Criswell, clerk and jury manager, 8th Judicial District, Ottumwa

• Kathy Gaylord, district court administrator, 7th Judicial District, Davenport

• Patrick Jennings, Woodbury county attorney, Sioux City

• Julie Kneip, clerk of court, 2nd Judicial District, Fort Dodge

• Bill Miller, Des Moines civil attorney, chairman of Iowa State Bar Association litigation

• Todd Nuccio, Iowa state court administrator

• Jerry Schnurr, Fort Dodge civil attorney and president-elect of Iowa State Bar Association

• Jennifer Solberg, Woodbury County chief public defender

• Chad Swanson, Waterloo civil attorney, president of Iowa Association of Justice

• Brian Williams, Black Hawk county attorney

• Mark Headlee, information technology director of Iowa Judicial Branch

The committee will review the current schedule to resume jury trials that the court has established in consultation with public health officials and other health care providers, and recommend whether the schedule should be altered, according to the court’s order.

Jury criminal trials can resume July 13 and civil trials Aug. 3, according to the order.

The task force also will make recommendations for how those trials should proceed, according to the court’s order.

Members should develop policies and procedures aimed at protecting the health and safety of jurors, court staff, attorneys, judges and visitors throughout the trial process, particularly during the identification of potential jurors, summons of potential jurors, jury selection, trials, jury instructions and jury deliberations.

Cook said members will have to consider the challenges for each type of trial. More jurors, for example, are needed in a criminal case, so space and logistics will have to be considered with social distancing requirements.

That will be more difficult in the rural courthouses that have less space.

A pool of 80 to 100 potential jurors are sometimes summoned for felony trials in larger counties, but that, too, may be a challenge with social distancing.

Another possibility would be requiring masks, but how will a mask affect the credibility of a witness if it hides the person’s facial expressions, Cook said.

These are all issues the members may encounter.

Steve Davis, Iowa Judicial Branch spokesman, said the goal is one uniform statewide plan, but it’s possible that each district may have some discretion, as in the previous orders issued during this pandemic, because of the differences in each county.

Davis said the task force members were chosen based on gender, background and geographic area.

The recommendations should be submitted to the court the first week in June.

Davis said he didn’t yet know when the task force would start meeting by phone or video conference or how often.

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




k

‘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




k

Iowa Gov. Kim Reynolds will not hold coronavirus press conference Friday

DES MOINES — Iowa Gov. Kim Reynolds will not be holding a news briefing Friday on the coronavirus outbreak in Iowa due to scheduling conflicts created by Vice President Mike Pence’s visit to Iowa, according to the governor’s office.

The vice president was slated to travel to Des Moines Friday morning with plans to participate in a discussion with faith leaders about how they are using federal and state guidelines to open their houses of worship in a safe and responsible manner.

Also, Friday afternoon the vice president was scheduled to visit Hy-Vee 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 will return to Washington, D.C., later Friday evening.

Along with the governor, Iowa’s Republican U.S. Sens. Joni Ernst and Chuck Grassley are slated to join Pence at Friday’s events in Iowa.

According to the governor’s staff, Reynolds plans to resume her regular schedule of 11 a.m. press conferences next week.




k

U.S. Rep. Dave Loebsack calls on president to protect packing plant workers

At the same time Vice President Mike Pence was in Iowa on Friday to discuss the nation’s food supply security, U.S. Rep. Dave Loebsack called on the administration to take more measures to protect workers in food processing plants.

Loebsack also questioned the decisions to reopen the economy being made by the Trump administration and Iowa Gov. Kim Reynolds.

“I don’t think we’re ready for that yet, quite honestly,” the Iowa City Democrat said.

“Ready” will be when adequate protections are in place for the people processing America’s food, Loebsack said.

Workers are showing up on the job, but “they fear for their families, they fear for themselves, they fear for everybody,” Loebsack said. “They don’t know if they’re going to catch this thing or not. But they’re there.”

Of particular concern are workers in food processing, such as those in meatpacking plants in Iowa where more than 1,600 cases of COVID-19 have been reported.

“I really believe that we should not open the plants if we do not ensure worker safety,” Loebsack said.

He called for President Donald Trump to use the Defense Production Act, which the president invoked to keep meatpacking plants open, to ensure an adequate supply of personal protective equipment for packing plant workers.

If Pence and the president are concerned about the nation’s food supply, then they need to “keep those workers safe and, therefore, keep those processing plants running” to avoid meat shortages at the grocery store, Loebsack said.

“We can’t have those plants running if workers are not protected. It’s that simple,” he said. “It’s not just the workers, it’s the families, it’s the community at large.”

With unemployment at 14.7 percent — probably higher, Loebsack said, Congress should extend federal coronavirus-related unemployment benefits of $600 a week beyond their current July end date.

He’s also pleased that the last relief package fixed a Small Business Administration Economic Injury Disaster Loan program to allow farmers to apply for assistance.

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




k

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




k

C.R. workplace shooting suspect turns self in after father drives him to Alabama police station

A man suspected of a workplace shooting last month at a vinyl window manufacturer in southwest Cedar Rapids turned himself into authorities Friday.

Jamal Devonte Edwards, 26, has been wanted since two men were shot at Associated Materials, 3801 Beverly Rd. SW, the morning of April 9.

Cedar Rapids police had indicated Edwards was wanted in particular for the shooting of Mark Robertson, 36.

Edwards faces charges of attempted murder, intimidation with a dangerous weapon, going armed with intent and willful injury.

The U.S. Marshals Service helped locate Edwards, distributing a photo of Edwards along the Gulf Coast. He was located in Mobile, Ala. when his father brought him to the Mobile police department so he could turn himself in, according to a Cedar Rapids police news release.

The April 9 shooting was reported at 5:03 a.m. after two employees were shot at Associated Materials. Both suffered non-life-threatening injuries, police said.

Police said at the time it appeared the shooter knew the two men.

Shawn Hardy, senior vice president of integrated products for Associated Materials, confirmed Edwards worked at the Cedar Rapids business, which gave him access to the building, but said he had been employed through a temp agency.




k

Injured Cedar Lake pelican bound for Henry Doorly Zoo in Omaha

CEDAR RAPIDS — An injured pelican rescued at Cedar Lake on Wednesday will have a permanent home at one of the top zoos in the Midwest.

“We downloaded all of the paperwork (on Friday), and we want to get it transported (to Henry Doorly Zoo and Aquarium in Omaha) within a week,” said Tracy Belle, founder and director of Wildthunder Wildlife and Animal Rehabilitation and Sanctuary in Independence.

“It’s doing well — we’re going to get it outside today to decompress a little.”

Belle, who also serves as primary animal rehabilitator at Wildthunder, believes the pelican is young — the average life span is 20 to 25 years — and she is not sure of its gender.

It suffered broken carpal bones and, according to Belle, surgical repair is unlikely.

“The veterinarian told me that the injury appears to be five to six weeks old,” she said. “I can only speculate, but I think when it flew into the lake, it may have clipped a power line.”

Belle said the pelican will need one more veterinary exam before transport to Omaha. In the meantime, “its appetite is good,” she said. “It’s eating five to 10 pounds of fish per day.”

Henry Doorly is closed due to the COVID-19 pandemic. In a typical year, the complex attracts about 2 million visitors.

Comments: (319) 368-8857; jeff.linder@thegazette.com




k

Congress working remotely highlights need for better broadband connectivity, Loebsack says

CEDAR RAPIDS — Like other members of the United States House, the “new normal” for Rep. Dave Loebsack involves a lot of time on the phone and in video conferences.

Although the Senate returned to Washington this past week, the House may not return to the Capitol until mid-May. As representatives work from their districts, many face the same challenges as their constituents who are working from home via various phone and video meeting platforms.

“They’re clunky, difficult, frustrating at times,” the 2nd District Democrat said after a 90-minute Energy and Commerce Committee teleconference meeting, “but we can get a lot of things done that way without necessarily going into Washington. It’s not the same by any means ... but I think we can get a lot of our work done that we have to get done even though were not there.”

If there’s an upside to the telecommuting downside, it’s that the poor connections, dropped calls and sometimes spotty internet signals highlight an issue Loebsack has been working on — Congress and the country need better broadband connectivity. A member of the Communications and Technology subcommittee of the Energy and Commerce Committee, which has jurisdiction over telecommunications issues, Loebsack also serves as a co-chair of the Rural Broadband Caucus.

In one meeting, Loebsack said, a fellow committee member was unable to ask questions because the Wi-Fi signal at his home outside of a southwestern city was so poor.

“So I think we’re going to make some progress” convincing congressional colleagues of the need to connect all Americans to reliable and affordable broadband internet, Loebsack said.

“In times like these, when families are at home, millions of K-12 students do not have access to the high-speed internet needed to take classes and complete their assignments online,” he said in an announcement with House Majority Whip James Clyburn and others of a House Democratic plan to connect all Americans to high-speed internet.

When the transmission of COVID-19 slows, the need for high-speed internet connectivity will remain as well as the need for Congress to provide incentives for internet service providers to close the “broadband gap” by extending service to the las mile in rural areas and eliminate what he called “internet deserts” that exist in cities.

The plan calls for an investment of $80 billion over five years for internet infrastructure and another $5 billion over five years for low-interest financing of projects.

With more reliable connectivity, Congress could consider remote voting at times like this when members don’t want to gather in Washington. House Speaker Nancy Pelosi has been cool to the idea, but Loebsack thinks members are “more open” to voting remotely.

“But we have to make sure that it’s completely secure, that the system can’t get hacked, and that votes are recorded properly,” he said.

Remote voting may be a may be a generational issue, “but I think this is doable.”

“I’m not making that prediction, but I would not be shocked if we move in that direction, especially the longer this (isolation) goes on,” Loebsack said.

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




k

Members – Block Permissions

Announcement of Members - Block Permissions, a WordPress plugin for showing/hiding content using the block editor (Gutenberg).




k

Thanks for all the positive support and reception to my...



Thanks for all the positive support and reception to my Lightroom presets so far, especially to those who pulled the trigger and became my first customers! I’d love to hear your feedback once you try them out!
.
Still time to enter the giveaway or to take advantage of the 50% sale! See my last post for full details and the link in my profile. ❤️ (at Toronto, Ontario)




k

I like the philosophy behind shooting with primes; that a...



I like the philosophy behind shooting with primes; that a photographer shouldn’t stand still but instead, continuously move closer, further, lower, or higher relative to his/her subject as a means of establishing a deeper connection. ????????

Save 50% on my custom Lightroom presets with HOLIDAY50. Link in profile. (at Toronto, Ontario)




k

Bricks are better black. ◾️ (at Toronto, Ontario)



Bricks are better black. ◾️ (at Toronto, Ontario)




k

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)




k

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)




k

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)




k

Quick survey: on average, what time is it when you check...



Quick survey: on average, what time is it when you check Instagram for the first time on any given day? (Be sure to include your timezone!)
.
PS: Thank you for all the incredible support on yesterday’s announcement. ❤️ (at Toronto, Ontario)






k

Anakin

I’m pleased to be able to say that Analog is joining forces with Fictive Kin! We already work together on Brooklyn Beta and other projects. We share the same ethics and ambitions. We have fun together. We’re good friends, and often old friends, too. They asked, we said yes. We had a beer. That’s pretty much how it went.

The Analog adventure that started in 2009 continues, just bigger, and hopefully better, with more fun, inspiration, and collaboration. I like to think of it like assembling Dai-X from Star Fleet but Voltron may serve if that’s more familiar to you.

It think Cameron came up with the word ‘Anakin’ from our two brands in 2010. It’s been used by us ever since whenever we get together to work or celebrate. It made me smile at the time, and even more so now, just like the echoes of the Analog identity in the lovely new Fictive Kin logo.

If you fancy keeping an eye on what we’re up to, follow @fictivekin. There’s more on the Fictive Kin blog, and in a post by Chris. Thanks for reading. Onwards!




k

Auphonic Leveler 1.8 and Auphonic Multitrack 1.4 Updates

Today we released free updates for the Auphonic Leveler Batch Processor and the Auphonic Multitrack Processor with many algorithm improvements and bug fixes for Mac and Windows.

Changelog

  • Linear Filtering Algorithms to avoid Asymmetric Waveforms:
    New zero-phase Adaptive Filtering Algorithms to avoid asymmetric waveforms.
    In asymmetric waveforms, the positive and negative amplitude values are disproportionate - please see Asymmetric Waveforms: Should You Be Concerned?.
    Asymmetrical waveforms are quite natural and not necessarily a problem. They are particularly common on recordings of speech, vocals and can be caused by low-end filtering. However, they limit the amount of gain that can be safely applied without introducing distortion or clipping due to aggressive limiting.
  • Noise Reduction Improvements:
    New and improved noise profile estimation algorithms and bug fixes for parallel Noise Reduction Algorithms.
  • Processing Finished Notification on Mac:
    A system notification (including a short glass sound) is now displayed on Mac OS when the Auphonic Leveler or Auphonic Multitrack has finished processing - thanks to Timo Hetzel.
  • Improved Dithering:
    Improved dithering algorithms - using SoX - if a bit-depth reduction is necessary during file export.
  • Auphonic Multitrack Fixes:
    Fixes for ducking and background tracks and for very short music tracks.
  • New Desktop Apps Documentation:
    The documentation of our desktop apps is now integrated in our new help system:
    see Auphonic Leveler Batch Processor and Auphonic Multitrack Processor.
  • Bug Fixes and Audio Algorithm Improvements:
    This release also includes many small bug fixes and all audio algorithms come with improvements and updated classifiers using the data from our Web Service.

About the Auphonic Desktop Apps

We offer two desktop programs which include our audio algorithms only. The algorithms will be computed offline on your device and are exactly the same as implemented in our Web Service.

The Auphonic Leveler Batch Processor is a batch audio file processor and includes all our (Singletrack) Audio Post Production Algorithms. It can process multiple productions at once.

Auphonic Multitrack includes our Multitrack Post Production Algorithms and requires multiple parallel input audio tracks, which will be analyzed and processed individually as well as combined to create one final mixdown.

Upgrade now

Everyone is encouraged to download the latest binaries:

Please let us know if you have any questions or feedback!






k

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!




k

Codec2: a whole Podcast on a Floppy Disk

In a previous blogpost we talked about the Opus codec, which offers very low bitrates. Another codec seeking to achieve even lower bitrates is Codec 2.

Codec 2 is designed for use with speech only, and although the bitrates are impressive the results aren’t as clear as Opus, as you can hear in the following audio examples. However, there is some interesting work being done with Codec 2 in combination with neural network (WaveNets) that is yielding great results.

Layers of a WaveNet neural network.

Background

Codec 2 is an open source codec designed for speech, and aims for compression rates between 700bps and 3200bps (bits per seconds).

The man behind it, David Rowe, is an electronic engineer currently living in South Australia. He started the project in September 2009, with the main aim of improving low-cost radio communication for people living in remote areas of the world. With this in mind, he set out to develop a codec that would significantly reduce file sizes and the bandwidth required when streaming.

Another motivation according to David, was to be free from patented technologies used by closed source codes which he believes “require expensive and awkward licenses and are stifling innovation”. His belief is that this work can be done without requiring the use of patent protected codecs, so all his work is open source.

Potential Applications

Rowe’s perceived applications include VOIP trunking, voice over low bandwidth HF/VHF digital radio, (especially for amateur radio, so as to avoid issues with the use of proprietary codecs), and developing world and remote area communications, including military, police and emergency services.

Why we’re interested here at Auphonic is for its potential for longer podcasts, presentations and audiobooks, allowing for low storage and minimizing the effect of bad network connections.

How it Works

To achieve the lower rates sought, speech has to be reduced into the smallest possible information/data, and this means that the amount of redundant information that is transmitted has to be minimized.

To do this, Codec 2 uses harmonic sinusoidal speech coding. This splits the speech into 10 - 30ms segments, called frames. Each frame is then analysed for the fundamental frequency (or pitch), and the number of harmonics that fit into a 4Khz bandwidth. Further, for each of the harmonics within the 4khz range, the amplitude and phase are recorded.

This information is then coded, and the decoder reconstructs the audio based on this data.

Codec 2 Block diagrams - Encoder (left) And decoder (right)
Figure from Rowtel.

Audio Examples and Comparison with other Codecs

Whilst it all sounds great in theory, how does the reality match up? Let’s have a listen.

Here is a short wav audio file:

intro-orig.wav - 1.3 MB (download):

Applying Codec 2 (without the WaveNet decoder) at the different rates available, 3200bps, 2400bps,1600bps,1200bps and 700bps, we get:

3200bps (download):
2400bps (download):
1600bps (download):
1200bps (download):
700bps (download):

These examples show significantly reduced file sizes.
Putting that information more meaningfully in terms of how much storage you would need for an hour of audio:

  • At 3200bps, 1 hour of audio requires only 1.37MB (this would fit on one old 3½-inch floppy disk!)
  • A rate of 2400bps equates to 1.03MB/h
  • A rate of 1600bps equates to 0.68MB/h (Or approximately 2 hours of audio on one floppy disk!)
  • A rate of 1200bps equates to 0.51MB/h
  • A rate of 700bps equates to 0.3MB/h

So great compression, but the result is clearly not natural sounding.

As a comparison here is the same audio as a 8kb/s MP3:

MP3 at 8 kb/s - 23kb file size (download):

The file size is significantly larger than Codec 2 and the quality is arguably still not useable. You can clearly hear what is sometimes called sizzle - the weird metallic sounds you hear on low quality MP3s.

There is a final codec which is worth comparing, one that that seems to capture the two ideals of usable quality at low bitrates that we want: Opus.
Because of it's convincing low-bitrate performance, Auphonic already offers Opus encoding all the way down to 6 kbps, the lowest bitrate that Opus supports.

Comparing Opus at this 6 kbps rate to the 8kbps MP3 shows a significant improvement - although slightly muffled, it still sounds natural:

Opus at 6kbps (download):

Returning to Codec 2, and purely as s a bit of fun, here are some samples of Codec 2 on music! (Note that Codec 2 is not designed for music, it was only ever conceived for use on speech).

Original file (download):
As a 8kbps MP3 (download):

I personally couldn’t listen to the MP3 at this rate, so let’s listen to what Codec 2 does!

Codec 2 at different bitrates:

3200bps (download):
2400bps (download):
1600bps (download):
1200bps (download):
700bps (download):

As you can hear, it is not suitable for this application at all!

Codec 2 and WaveNet

As we have heard, despite the impressive bitrates achieved, the end result is not very natural sounding.
However, where it starts to get more interesting is the work done by W. Bastiaan Kleijn from Cornell University Library. He has been using with Codec 2 running at 2400bps on the coding side, but replaced the Codec 2 decoder with a WaveNet deep learning generative model (for more informationsee the paper Wavenet based low rate speech coding).

Here are some samples from the authors:

Codec Male Example
Original File
Codec 2
With WaveNet Decoder
Codec Female Example
Original File
Codec 2
With WaveNet Decoder

Comparing to Codec 2 you can hear a significant increase in quality, and if you compare to the original, there is not a significant decrease in quality.

David Rowe himself has stated that he considers the result to be "a game changer for low bit rate speech coding" and “as good an an 8000bps wideband speech codec”.

Conclusion

Whilst the (original) Codec 2 project represents very interesting work, it is limited, and the end result is not suited for podcasting. Also as we heard in the audio examples, it can only be used for voice recordings, and not music.

However, Codec 2 in combination with a WaveNet decoder improves the quality a lot and the low bitrate (2400bps) would be extremely interesting for podcasts and audiobooks distribution as well: one hour of audio would require only 1.03MB of storage!

Auphonic will add support for Codec 2 output files when the WaveNet decoder is in a usable form. For now we have just added support for Codec 2 input files.







k

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







k

Horizontal or/and Vertical Format in Kayak Photography

Like most paddlers I have a tendency to shoot pictures in a horizontal (landscape) format. It is more tricky to shoot in a vertical format from my tippy kayaks, especially, when I have to use a paddle to stabilize my camera.




k

Markdown Comes Alive! Part 1, Basic Editor

In my last post, I covered what LiveView is at a high level. In this series, we’re going to dive deeper and implement a LiveView powered Markdown editor called Frampton. This series assumes you have some familiarity with Phoenix and Elixir, including having them set up locally. Check out Elizabeth’s three-part series on getting started with Phoenix for a refresher.

This series has a companion repository published on GitHub. Get started by cloning it down and switching to the starter branch. You can see the completed application on master. Our goal today is to make a Markdown editor, which allows a user to enter Markdown text on a page and see it rendered as HTML next to it in real-time. We’ll make use of LiveView for the interaction and the Earmark package for rendering Markdown. The starter branch provides some styles and installs LiveView.

Rendering Markdown

Let’s set aside the LiveView portion and start with our data structures and the functions that operate on them. To begin, a Post will have a body, which holds the rendered HTML string, and title. A string of markdown can be turned into HTML by calling Post.render(post, markdown). I think that just about covers it!

First, let’s define our struct in lib/frampton/post.ex:

defmodule Frampton.Post do
  defstruct body: "", title: ""

  def render(%__MODULE{} = post, markdown) do
    # Fill me in!
  end
end

Now the failing test (in test/frampton/post_test.exs):

describe "render/2" do
  test "returns our post with the body set" do
    markdown = "# Hello world!"                                                                                                                 
    assert Post.render(%Post{}, markdown) == {:ok, %Post{body: "<h1>Hello World</h1>
"}}
  end
end

Our render method will just be a wrapper around Earmark.as_html!/2 that puts the result into the body of the post. Add {:earmark, "~> 1.4.3"} to your deps in mix.exs, run mix deps.get and fill out render function:

def render(%__MODULE{} = post, markdown) do
  html = Earmark.as_html!(markdown)
  {:ok, Map.put(post, :body, html)}
end

Our test should now pass, and we can render posts! [Note: we’re using the as_html! method, which prints error messages instead of passing them back to the user. A smarter version of this would handle any errors and show them to the user. I leave that as an exercise for the reader…] Time to play around with this in an IEx prompt (run iex -S mix in your terminal):

iex(1)> alias Frampton.Post
Frampton.Post
iex(2)> post = %Post{}
%Frampton.Post{body: "", title: ""}
iex(3)> {:ok, updated_post} = Post.render(post, "# Hello world!")
{:ok, %Frampton.Post{body: "<h1>Hello world!</h1>
", title: ""}}
iex(4)> updated_post
%Frampton.Post{body: "<h1>Hello world!</h1>
", title: ""}

Great! That’s exactly what we’d expect. You can find the final code for this in the render_post branch.

LiveView Editor

Now for the fun part: Editing this live!

First, we’ll need a route for the editor to live at: /editor sounds good to me. LiveViews can be rendered from a controller, or directly in the router. We don’t have any initial state, so let's go straight from a router.

First, let's put up a minimal test. In test/frampton_web/live/editor_live_test.exs:

defmodule FramptonWeb.EditorLiveTest do
  use FramptonWeb.ConnCase
  import Phoenix.LiveViewTest

  test "the editor renders" do
    conn = get(build_conn(), "/editor")
    assert html_response(conn, 200) =~ "data-test="editor""
  end
end

This test doesn’t do much yet, but notice that it isn’t live view specific. Our first render is just the same as any other controller test we’d write. The page’s content is there right from the beginning, without the need to parse JavaScript or make API calls back to the server. Nice.

To make that test pass, add a route to lib/frampton_web/router.ex. First, we import the LiveView code, then we render our Editor:

import Phoenix.LiveView.Router
# … Code skipped ...
# Inside of `scope "/"`:
live "/editor", EditorLive

Now place a minimal EditorLive module, in lib/frampton_web/live/editor_live.ex:

defmodule FramptonWeb.EditorLive do
  use Phoenix.LiveView

  def render(assigns) do
    ~L"""
      <div data-test=”editor”>
        <h1>Hello world!</h1>
      </div>
      """
  end

  def mount(_params, _session, socket) do
    {:ok, socket}
  end
end

And we have a passing test suite! The ~L sigil designates that LiveView should track changes to the content inside. We could keep all of our markup in this render/1 method, but let’s break it out into its own template for demonstration purposes.

Move the contents of render into lib/frampton_web/templates/editor/show.html.leex, and replace EditorLive.render/1 with this one liner: def render(assigns), do: FramptonWeb.EditorView.render("show.html", assigns). And finally, make an EditorView module in lib/frampton_web/views/editor_view.ex:

defmodule FramptonWeb.EditorView do
  use FramptonWeb, :view
  import Phoenix.LiveView
end

Our test should now be passing, and we’ve got a nicely separated out template, view and “live” server. We can keep markup in the template, helper functions in the view, and reactive code on the server. Now let’s move forward to actually render some posts!

Handling User Input

We’ve got four tasks to accomplish before we are done:

  1. Take markdown input from the textarea
  2. Send that input to the LiveServer
  3. Turn that raw markdown into HTML
  4. Return the rendered HTML to the page.

Event binding

To start with, we need to annotate our textarea with an event binding. This tells the liveview.js framework to forward DOM events to the server, using our liveview channel. Open up lib/frampton_web/templates/editor/show.html.leex and annotate our textarea:

<textarea phx-keyup="render_post"></textarea>

This names the event (render_post) and sends it on each keyup. Let’s crack open our web inspector and look at the web socket traffic. Using Chrome, open the developer tools, navigate to the network tab and click WS. In development you’ll see two socket connections: one is Phoenix LiveReload, which polls your filesystem and reloads pages appropriately. The second one is our LiveView connection. If you let it sit for a while, you’ll see that it's emitting a “heartbeat” call. If your server is running, you’ll see that it responds with an “ok” message. This lets LiveView clients know when they've lost connection to the server and respond appropriately.

Now, type some text and watch as it sends down each keystroke. However, you’ll also notice that the server responds with a “phx_error” message and wipes out our entered text. That's because our server doesn’t know how to handle the event yet and is throwing an error. Let's fix that next.

Event handling

We’ll catch the event in our EditorLive module. The LiveView behavior defines a handle_event/3 callback that we need to implement. Open up lib/frampton_web/live/editor_live.ex and key in a basic implementation that lets us catch events:

def handle_event("render_post", params, socket) do
  IO.inspect(params)

  {:noreply, socket}
end

The first argument is the name we gave to our event in the template, the second is the data from that event, and finally the socket we’re currently talking through. Give it a try, typing in a few characters. Look at your running server and you should see a stream of events that look something like this:

There’s our keystrokes! Next, let’s pull out that value and use it to render HTML.

Rendering Markdown

Lets adjust our handle_event to pattern match out the value of the textarea:

def handle_event("render_post", %{"value" => raw}, socket) do

Now that we’ve got the raw markdown string, turning it into HTML is easy thanks to the work we did earlier in our Post module. Fill out the body of the function like this:

{:ok, post} = Post.render(%Post{}, raw)
IO.inspect(post)

If you type into the textarea you should see output that looks something like this:

Perfect! Lastly, it’s time to send that rendered html back to the page.

Returning HTML to the page

In a LiveView template, we can identify bits of dynamic data that will change over time. When they change, LiveView will compare what has changed and send over a diff. In our case, the dynamic content is the post body.

Open up show.html.leex again and modify it like so:

<div class="rendered-output">
  <%= @post.body %>
</div>

Refresh the page and see:

Whoops!

The @post variable will only be available after we put it into the socket’s assigns. Let’s initialize it with a blank post. Open editor_live.ex and modify our mount/3 function:

def mount(_params, _session, socket) do
  post = %Post{}
  {:ok, assign(socket, post: post)}
end

In the future, we could retrieve this from some kind of storage, but for now, let's just create a new one each time the page refreshes. Finally, we need to update the Post struct with user input. Update our event handler like this:

def handle_event("render_post", %{"value" => raw}, %{assigns: %{post: post}} = socket) do
  {:ok, post} = Post.render(post, raw)
  {:noreply, assign(socket, post: post)
end

Let's load up http://localhost:4000/editor and see it in action.

Nope, that's not quite right! Phoenix won’t render this as HTML because it’s unsafe user input. We can get around this (very good and useful) security feature by wrapping our content in a raw/1 call. We don’t have a database and user processes are isolated from each other by Elixir. The worst thing a malicious user could do would be crash their own session, which doesn’t bother me one bit.

Check the edit_posts branch for the final version.

Conclusion

That’s a good place to stop for today. We’ve accomplished a lot! We’ve got a dynamically rendering editor that takes user input, processes it and updates the page. And we haven’t written any JavaScript, which means we don’t have to maintain or update any JavaScript. Our server code is built on the rock-solid foundation of the BEAM virtual machine, giving us a great deal of confidence in its reliability and resilience.

In the next post, we’ll tackle making a shared editor, allowing multiple users to edit the same post. This project will highlight Elixir’s concurrency capabilities and demonstrate how LiveView builds on them to enable some incredible user experiences.



  • Code
  • Back-end Engineering

k

CLI Equivalents for Common MAMP PRO and Sequel Pro Tasks

Working on website front ends I sometimes use MAMP PRO to manage local hosts and Sequel Pro to manage databases. Living primarily in my text editor, a terminal, and a browser window, moving to these click-heavy dedicated apps can feel clunky. Happily, the tasks I have most frequently turned to those apps for —starting and stopping servers, creating new hosts, and importing, exporting, deleting, and creating databases— can be done from the command line.

I still pull up MAMP PRO if I need to change a host's PHP version or work with its other more specialized settings, or Sequel Pro to quickly inspect a database, but for the most part I can stay on the keyboard and in my terminal. Here's how:

Command Line MAMP PRO

You can start and stop MAMP PRO's servers from the command line. You can even do this when the MAMP PRO desktop app isn't open.

Note: MAMP PRO's menu icon will not change color to reflect the running/stopped status when the status is changed via the command line.

  • Start the MAMP PRO servers:
/Applications/MAMP PRO.app/Contents/MacOS/MAMP PRO cmd startServers
  • Stop the MAMP PRO servers:
/Applications/MAMP PRO.app/Contents/MacOS/MAMP PRO cmd stopServers
  • Create a host (replace host_name and root_path):
/Applications/MAMP PRO.app/Contents/MacOS/MAMP PRO cmd createHost host_name root_path

MAMP PRO-friendly Command Line Sequel Pro

Note: if you don't use MAMP PRO, just replace the /Applications/MAMP/Library/bin/mysql with mysql.

In all of the following commands, replace username with your user name (locally this is likely root) and database_name with your database name. The -p (password) flag with no argument will trigger an interactive password prompt. This is more secure than including your password in the command itself (like -pYourPasswordHere). Of course, if you're using the default password root is not particular secure to begin with so you might just do -pYourPasswordHere.

Setting the -h (host) flag to localhost or 127.0.0.1 tells mysql to look at what's on localhost. With the MAMP PRO servers running, that will be the MAMP PRO databases.

# with the MAMP PRO servers running, these are equivalent:
# /Applications/MAMP/Library/bin/mysql -h 127.0.0.1 other_options
# and
# /Applications/MAMP/Library/bin/mysql -h localhost other_options

/Applications/MAMP/Library/bin/mysql mysql_options # enter. opens an interactive mysql session
mysql> some command; # don't forget the semicolon
mysql> exit;
  • Create a local database
# with the MAMP PRO servers running
# replace `username` with your username, which is `root` by default
/Applications/MAMP/Library/bin/mysql -h localhost -u username -p -e "create database database_name"

or

# with the MAMP PRO servers running
# replace `username` (`root` by default) and `database_name`
/Applications/MAMP/Library/bin/mysql -h localhost -u username -p # and then enter
mysql> create database database_name; # don't forget the semicolon
mysql> exit

    MAMP PRO's databases are stored in /Library/Application Support/appsolute/MAMP PRO/db so to confirm that it worked you can

ls /Library/Application Support/appsolute/MAMP PRO/db
# will output the available mysql versions. For example I have
mysql56_2018-11-05_16-25-13     mysql57

# If it isn't clear which one you're after, open the main MAMP PRO and click
# on the MySQL "servers and services" item. In my case it shows "Version: 5.7.26"

# Now look in the relevant MySQL directory
ls /Library/Application Support/appsolute/MAMP PRO/db/mysql57
# the newly created database should be in the list
  • Delete a local database
# with the MAMP PRO servers running
# replace `username` (`root` by default) and `database_name`
/Applications/MAMP/Library/bin/mysql -h localhost -u username -p -e "drop database database_name"
  • Export a dump of a local database. Note that this uses mysqldump not mysql.
# to export an uncompressed file
# replace `username` (`root` by default) and `database_name`
/Applications/MAMP/Library/bin/mysqldump -h localhost -u username -p database_name > the/output/path.sql

# to export a compressed file
# replace `username` (`root` by default) and `database_name`
/Applications/MAMP/Library/bin/mysqldump -h localhost -u username -p database_name | gzip -c > the/output/path.gz

  • Export a local dump from an external database over SSH. Note that this uses mysqldump not mysql.

# replace `ssh-user`, `ssh_host`, `mysql_user`, `database_name`, and the output path

# to end up with an uncompressed file
ssh ssh_user@ssh_host "mysqldump -u mysql_user -p database_name | gzip -c" | gunzip > the/output/path.sql

# to end up with a compressed file
ssh ssh_user@ssh_host "mysqldump -u mysql_user -p database_name | gzip -c" > the/output/path.gz
  • Import a local database dump into a local database
# with the MAMP PRO servers running
# replace `username` (`root` by default) and `database_name`
/Applications/MAMP/Library/bin/mysql -h localhost -u username -p database_name < the/dump/path.sql
  • Import a local database dump into a remote database over SSH. Use care with this one. But if you are doing it with Sequel Pro —maybe you are copying a Craft site's database from a production server to a QA server— you might as well be able to do it on the command line.
ssh ssh_user@ssh_host "mysql -u username -p remote_database_name" < the/local/dump/path.sql


For me, using the command line instead of the MAMP PRO and Sequel Pro GUI means less switching between keyboard and mouse, less opening up GUI features that aren't typically visible on my screen, and generally better DX. Give it a try! And while MAMP Pro's CLI is limited to the essentials, command line mysql of course knows no limits. If there's something else you use Sequel Pro for, you may be able to come up with a mysql CLI equivalent you like even better.



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

k

A Parent’s Guide to Working From Home, During a Global Pandemic, Without Going Insane

Though I usually enjoy working from Viget’s lovely Boulder office, during quarantine I am now working from home while simultaneously parenting my 3-year-old daughter Audrey. My husband works in healthcare and though he is not on the front lines battling COVID-19, he is still an essential worker and as such leaves our home to work every day.

Some working/parenting days are great! I somehow get my tasks accomplished, my kid is happy, and we spend some quality time together.

And some days are awful. I have to ignore my daughter having a meltdown and try to focus on meetings, and I wish I wasn’t in this situation at all. Most days are somewhere in the middle; I’m just doing my best to get by.

I’ve seen enough working parent memes and cries for help on social media to know that I’m not alone. There are many parents out there who now get to experience the stress and anxiety of living through a global pandemic while simultaneously navigating ways to stay productive while working from home and being an effective parent. Fun isn’t it?

I’m not an expert on the matter, but I have found a few small things that are making me feel a bit more sane. I hope sharing them will make someone else’s life easier too.

Truths to Accept

First, let’s acknowledge some truths about this new situation we find ourselves in:

Truth 1: We’ve lost something.

Parents have lost more than daycare and schools during this epidemic. We’ve lost any time that we had for ourselves, and that was really valuable. We no longer have small moments in the day to catch up on our personal lives. I no longer have a commute to separate my work duties from my mom duties, or catch up with my friends, or just be quiet.

Truth 2: We’re human.

The reason you can’t be a great employee and a great parent and a great friend and a great partner or spouse all day every day isn’t because you’re doing a bad job, it’s because being constantly wonderful in all aspects of your life is impossible. Pick one or two of those things a day to focus on.

Truth 3: We’re all doing our best.

This is the most important part of this article. Be kind to yourselves. This isn’t easy, and putting so much pressure on yourself that you break isn’t going to make it any easier.

Work from Home Goals

Now that we’ve accepted some truths about our current situation, let’s set some goals.

Goal 1: Do Good Work

At Viget, and wherever you work, with kids or without we all want to make sure that the quality of our work stays up throughout the pandemic and that we can continue to be reliable team members and employees to the best of our abilities.

Goal 2: Stay Sane

We need to figure out ways to do this without sacrificing ourselves entirely. For me, this means fitting my work into normal work hours as much as possible so that I can still have some downtime in the evenings.

Goal 3: Make This Sustainable

None of us knows how long this will last but we may as well begin mentally preparing for a long haul.

Work from Home Rules

Now, there are some great Work from Home Rules that apply to everyone with or without kids. My coworker Paul Koch shared these with the Viget team a Jeremy Bearimy ago and I agree this is also the foundation for working from home with kids.

  1. When you’re in a remote meeting, minimize other windows to stay focused
  2. Set a schedule and avoid chores*
  3. Take breaks away from the screen
  4. Plan your workday on the calendar+
  5. Be mindful of Slack and social media as a distraction
  6. Use timers+
  7. Keep your work area separate from where you relax
  8. Pretend that you’re still WFW
  9. Experiment and figure out what works for you

In the improv spirit I say “Yes, AND….” to these tips. And so, here are my adjusted rules for WFH while kiddos around: These have both been really solid tools for me, so let’s dig in.

Daily flexible schedule for kids

Day Planning: Calendars and Timers

A few small tweaks and adjustments make this even more doable for me and my 3-year-old. First- I don’t avoid chores entirely. If I’m going up and down the stairs all day anyway I might as well throw in a load of laundry while I’m at it. The more I can get done during the day means a greater chance of some down time in the evening.

Each morning I plan my day and Audrey’s day:

My Work Day:

Audrey's Day

Identify times of day you are more likely to be focus and protect them. For me, I know I have a block of time from 5-7a before Audrey wakes up and again during “nap time” from 1-3p.I built a construction paper “schedule” that we update and reorganize daily. We make the schedule together each day. She feels ownership over it and she gets to be the one who tells me what we do next.
Look at your calendar first thing and make adjustments either in your plans or move meetings if you have to.I’m strategic about screen time- I try to schedule it when I have meetings. It also helps to schedule a physical activity before screen time as she is less likely to get bored.
Make goals for your day: Tackle time sensitive tasks first. Take care of things that either your co-workers or clients are waiting on from you first, this will help your day be a lot less stressful. Non-time sensitive tasks come next- these can be done at any time of day.We always include “nap time” even though she rarely naps anymore. This is mostly a time for us both to be alone.

When we make the schedule together it also helps me understand her favorite parts of the day and reminds me to include them.

Once our days are planned, I also use timers to help keep the structure of the day. (I bought a great alarm clock for kids on Amazon that turns colors to signal bedtime and quiet time. It’s been hugely worth it for me.)

Timers for Me:

Timers for Audrey:

More than ever, I rely on a time tracking timer. At Viget we use Harvest to track time, and it has a handy built in timer, but there are many apps or online tools that could help you keep track of your time as well.Audrey knows what time she can come out of her room in the morning. If she wakes up before the light is green she plays quietly in her room.
I need a timer because the days and hours are bleeding together- without tracking as I go it would be really hard for me to remember when I worked on certain projects or know for certain if I gave Viget enough time for the day.She knows how long “nap time” is in the afternoon.
Starting and stopping the timer helps me turn on and off “work mode”, which is a helpful sanity bonus.Perhaps best of all I am not the bad guy! “Sorry honey, the light isn’t green yet and there really isn’t anything mommy can do about it” is my new favorite way to ensure we both get some quiet time.

Work from Home Rules: Updated for Parents

Finally, I have a few more Work from Home Rules for parents to add to the list:

  1. Minimize other windows in remote meetings
  2. Set a schedule and fit in some chores if time allows
  3. Take breaks away from the screen
  4. Schedule both your and your kids’ days
  5. Be mindful of Slack and social media as a distraction
  6. Use timers to track your own time and help your kids understand the day
  7. Keep your work area separate from where you relax
  8. Pretend that you’re still WFW
  9. Experiment and figure out what works for you
  10. Be prepared with a few activities
    • Each morning, have just ONE thing ready to go. This can be a worksheet you printed out, a coloring station setup, a new bag of kinetic sand you just got delivered from Amazon, a kids dance video on YouTube or an iPad game. Recently I started enlisting my mom to read stories on Facetime. The activity doesn’t have to be new each day but (especially for young kids) it has to be handy for you to start up quickly if your schedule changes
  11. Clearly communicate your availability with your team and project PMs
    • Life happens. Some days are going to be hard. Whatever you do, don’t burn yourself out or leave your team hanging. If you need to move a meeting or take a day off, communicate that as early and as clearly as you can.
  12. Take PTO if you can
    • None of us are superheroes. If you’re feeling overwhelmed- take a look at the next few days and figure out which one makes the most sense for you to take a break.
  13. Take breaks to be alone without doing a task
    • Work and family responsibilities have blended together, there’s almost no room for being alone. If you can find some precious alone time don’t use it to fold laundry or clean the bathroom. Just zone out. I think we all really need this.

Last but not least, enjoy your time at home if you can. This is an unusual circumstance and even though it’s really hard, there are parts that are really great too.

If you have some great WFH tips we’d love to hear about them in the comments!




k

So You've Written a Bad Design Take

So you’ve just written a blog post or tweet about why wireframes are becoming obsolete, the dangers of “too accessible” design, or how a certain style of icon creates “cognitive fatigue.”

Your post went viral, but now you’re getting ratioed by rude people on the Internet. That sucks! You were just trying to start a conversation and you probably didn’t deserve all that negativity (except for you, “too accessible” guy).

Most likely, you made one of these common mistakes:

1. You made generalizations about “design”

You, a good user-centered designer, know that you are not your user. Nor are you every designer.

First of all, let's acknowledge that there is no universal definition of design. Even if we narrow it down to software design, it’s still hard to make generalizations. Agency, in-house, product, startup, enterprise, non-profit, website, app, connected hardware, etc. – there are a lot of different work contexts and cultures for people with “designer” in their titles.

"The Design Industry" is not a thing, but even if it were, you don't speak for it. Don’t assume that the kind of design work you do is the universal default.

2. You didn’t share enough context

There are many great design books and few great design blog posts. (There are, to my knowledge, no great design tweets, but I am open to your suggestions.) Writing about design is not well suited to short formats, because context plays such an important role and there’s always a lot of it to cover.

Writing about your work should include as much context as you would include if you were presenting your portfolio for a job interview. What kind of organization did you work for? Who was your client and/or your stakeholders? What was the goal of the project? Your timeline? What was the makeup of your team? What were the notable business rules and constraints? How are you defining effectiveness and success?

Without these kinds of details, it’s not possible for other designers to know if what you’ve written is credible or applicable to them.

3. You were too certain

A blog post doesn’t need to be a dissertation. It’s okay to share hunches and anecdotes, but give the necessary caveats. And if you're making claims about science, bruh, you gotta cite your sources.

Be humble in your takes. Your account of what worked for you and why is more valuable to your peers than making sweeping claims and reheating the same old arguments. Be prepared to be told you’re wrong, and have the humility to realize that your perspective is just your perspective. Real conversations, like good design, are built on feedback and diverse viewpoints.

Together, we can improve the discourse in our information ecosystems. Don't generalize. Give context. Be humble.




k

Occupations that may be taken off or put onto the skilled migration occupation lists

The Department of Employment, Skills, Small and Family Business is considering removing the following occupations from the Skilled Migration Occupation Lists (Skills List) in March 2020: Careers Counsellor Vehicle Trimmer Business Machine Mechanic Animal Attendants and Trainers Gardener (General) Hairdresser Wood Machinist Massage Therapist Community Worker Diving Instructor (Open Water) Gymnastics Coach or Instructor At […]

The post Occupations that may be taken off or put onto the skilled migration occupation lists appeared first on Visa Australia - Immigration Lawyers & Registered Migration Agents.




k

What can I do if I am on a working holiday or seasonal worker visa in the Coronavirus (COVID-19) crisis?

Seasonal Worker Programme and Pacific Labour Scheme workers can extend their stay for up to 12 months to work for approved employers as long as pastoral care and accommodation needs of workers are met to minimise health risks to visa holders and the community. Approved employers under the Seasonal Worker Programme and Pacific Labour Scheme […]

The post What can I do if I am on a working holiday or seasonal worker visa in the Coronavirus (COVID-19) crisis? appeared first on Visa Australia - Immigration Lawyers & Registered Migration Agents.




k

Employer sponsored temporary work visas (482 and 457) and Coronavirus (COVID-19)

If you’re a Temporary Skill Shortage visa holder – what should you do if you have been stood down or your work hours are reduced by your employer? The Australian Government has announced that Temporary Skill Shortage visa holders who have been stood down, but not laid off, will maintain their visa validity and businesses […]

The post Employer sponsored temporary work visas (482 and 457) and Coronavirus (COVID-19) appeared first on Visa Australia - Immigration Lawyers & Registered Migration Agents.




k

What’s New in Recipe Card Blocks Free & PRO

It’s been a few months since the release of the Recipe Card Blocks PRO plugin, and our team continued to release new updates constantly for both versions of the plugin: Free & PRO. As we’ve released many major updates for both versions in the past months, let’s make a quick overview of the most important changes and new features we’ve […]




k

Social Icons Widget 4.0 — Now With a Social Icons Block for Gutenberg Included

In 2015 we launched Social Icons Widget by WPZOOM with the intent to provide WordPress users with a simple and easy-to-use widget for adding social links to their websites. With over 100k installs at the moment and continuous positive feedback from the users, it kept us motivated to constantly improve and keep updating this free plugin. Now, to keep the […]




k

Meet the Remote Workplaces of the WPZOOM Team

The world turned upside down lately, forcing the majority of people to work from their homes. For the WPZOOM team, working remotely is not something new. Some of our team members have been working remotely since they joined us, others had the experience of both working from home and from the office (hello, Pavel). However, we’ve gone completely remote, without […]




k

Presence 2.0: Beaver Builder Integration, Dark Skin & More!

Great news for the users of Presence — our multipurpose theme. We have finally released the long-awaited 2.0 version, which features major changes and improvements. What’s new in Presence 2.0? Beaver Builder Integration Dark Skin New Demo: Organic Shop New Typography and Colors options in the Customizer New Templates in Page Builder Beaver Builder Integration If you have followed recent […]







k

Markdown Comes Alive! Part 1, Basic Editor

In my last post, I covered what LiveView is at a high level. In this series, we’re going to dive deeper and implement a LiveView powered Markdown editor called Frampton. This series assumes you have some familiarity with Phoenix and Elixir, including having them set up locally. Check out Elizabeth’s three-part series on getting started with Phoenix for a refresher.

This series has a companion repository published on GitHub. Get started by cloning it down and switching to the starter branch. You can see the completed application on master. Our goal today is to make a Markdown editor, which allows a user to enter Markdown text on a page and see it rendered as HTML next to it in real-time. We’ll make use of LiveView for the interaction and the Earmark package for rendering Markdown. The starter branch provides some styles and installs LiveView.

Rendering Markdown

Let’s set aside the LiveView portion and start with our data structures and the functions that operate on them. To begin, a Post will have a body, which holds the rendered HTML string, and title. A string of markdown can be turned into HTML by calling Post.render(post, markdown). I think that just about covers it!

First, let’s define our struct in lib/frampton/post.ex:

defmodule Frampton.Post do
  defstruct body: "", title: ""

  def render(%__MODULE{} = post, markdown) do
    # Fill me in!
  end
end

Now the failing test (in test/frampton/post_test.exs):

describe "render/2" do
  test "returns our post with the body set" do
    markdown = "# Hello world!"                                                                                                                 
    assert Post.render(%Post{}, markdown) == {:ok, %Post{body: "<h1>Hello World</h1>
"}}
  end
end

Our render method will just be a wrapper around Earmark.as_html!/2 that puts the result into the body of the post. Add {:earmark, "~> 1.4.3"} to your deps in mix.exs, run mix deps.get and fill out render function:

def render(%__MODULE{} = post, markdown) do
  html = Earmark.as_html!(markdown)
  {:ok, Map.put(post, :body, html)}
end

Our test should now pass, and we can render posts! [Note: we’re using the as_html! method, which prints error messages instead of passing them back to the user. A smarter version of this would handle any errors and show them to the user. I leave that as an exercise for the reader…] Time to play around with this in an IEx prompt (run iex -S mix in your terminal):

iex(1)> alias Frampton.Post
Frampton.Post
iex(2)> post = %Post{}
%Frampton.Post{body: "", title: ""}
iex(3)> {:ok, updated_post} = Post.render(post, "# Hello world!")
{:ok, %Frampton.Post{body: "<h1>Hello world!</h1>
", title: ""}}
iex(4)> updated_post
%Frampton.Post{body: "<h1>Hello world!</h1>
", title: ""}

Great! That’s exactly what we’d expect. You can find the final code for this in the render_post branch.

LiveView Editor

Now for the fun part: Editing this live!

First, we’ll need a route for the editor to live at: /editor sounds good to me. LiveViews can be rendered from a controller, or directly in the router. We don’t have any initial state, so let's go straight from a router.

First, let's put up a minimal test. In test/frampton_web/live/editor_live_test.exs:

defmodule FramptonWeb.EditorLiveTest do
  use FramptonWeb.ConnCase
  import Phoenix.LiveViewTest

  test "the editor renders" do
    conn = get(build_conn(), "/editor")
    assert html_response(conn, 200) =~ "data-test="editor""
  end
end

This test doesn’t do much yet, but notice that it isn’t live view specific. Our first render is just the same as any other controller test we’d write. The page’s content is there right from the beginning, without the need to parse JavaScript or make API calls back to the server. Nice.

To make that test pass, add a route to lib/frampton_web/router.ex. First, we import the LiveView code, then we render our Editor:

import Phoenix.LiveView.Router
# … Code skipped ...
# Inside of `scope "/"`:
live "/editor", EditorLive

Now place a minimal EditorLive module, in lib/frampton_web/live/editor_live.ex:

defmodule FramptonWeb.EditorLive do
  use Phoenix.LiveView

  def render(assigns) do
    ~L"""
      <div data-test=”editor”>
        <h1>Hello world!</h1>
      </div>
      """
  end

  def mount(_params, _session, socket) do
    {:ok, socket}
  end
end

And we have a passing test suite! The ~L sigil designates that LiveView should track changes to the content inside. We could keep all of our markup in this render/1 method, but let’s break it out into its own template for demonstration purposes.

Move the contents of render into lib/frampton_web/templates/editor/show.html.leex, and replace EditorLive.render/1 with this one liner: def render(assigns), do: FramptonWeb.EditorView.render("show.html", assigns). And finally, make an EditorView module in lib/frampton_web/views/editor_view.ex:

defmodule FramptonWeb.EditorView do
  use FramptonWeb, :view
  import Phoenix.LiveView
end

Our test should now be passing, and we’ve got a nicely separated out template, view and “live” server. We can keep markup in the template, helper functions in the view, and reactive code on the server. Now let’s move forward to actually render some posts!

Handling User Input

We’ve got four tasks to accomplish before we are done:

  1. Take markdown input from the textarea
  2. Send that input to the LiveServer
  3. Turn that raw markdown into HTML
  4. Return the rendered HTML to the page.

Event binding

To start with, we need to annotate our textarea with an event binding. This tells the liveview.js framework to forward DOM events to the server, using our liveview channel. Open up lib/frampton_web/templates/editor/show.html.leex and annotate our textarea:

<textarea phx-keyup="render_post"></textarea>

This names the event (render_post) and sends it on each keyup. Let’s crack open our web inspector and look at the web socket traffic. Using Chrome, open the developer tools, navigate to the network tab and click WS. In development you’ll see two socket connections: one is Phoenix LiveReload, which polls your filesystem and reloads pages appropriately. The second one is our LiveView connection. If you let it sit for a while, you’ll see that it's emitting a “heartbeat” call. If your server is running, you’ll see that it responds with an “ok” message. This lets LiveView clients know when they've lost connection to the server and respond appropriately.

Now, type some text and watch as it sends down each keystroke. However, you’ll also notice that the server responds with a “phx_error” message and wipes out our entered text. That's because our server doesn’t know how to handle the event yet and is throwing an error. Let's fix that next.

Event handling

We’ll catch the event in our EditorLive module. The LiveView behavior defines a handle_event/3 callback that we need to implement. Open up lib/frampton_web/live/editor_live.ex and key in a basic implementation that lets us catch events:

def handle_event("render_post", params, socket) do
  IO.inspect(params)

  {:noreply, socket}
end

The first argument is the name we gave to our event in the template, the second is the data from that event, and finally the socket we’re currently talking through. Give it a try, typing in a few characters. Look at your running server and you should see a stream of events that look something like this:

There’s our keystrokes! Next, let’s pull out that value and use it to render HTML.

Rendering Markdown

Lets adjust our handle_event to pattern match out the value of the textarea:

def handle_event("render_post", %{"value" => raw}, socket) do

Now that we’ve got the raw markdown string, turning it into HTML is easy thanks to the work we did earlier in our Post module. Fill out the body of the function like this:

{:ok, post} = Post.render(%Post{}, raw)
IO.inspect(post)

If you type into the textarea you should see output that looks something like this:

Perfect! Lastly, it’s time to send that rendered html back to the page.

Returning HTML to the page

In a LiveView template, we can identify bits of dynamic data that will change over time. When they change, LiveView will compare what has changed and send over a diff. In our case, the dynamic content is the post body.

Open up show.html.leex again and modify it like so:

<div class="rendered-output">
  <%= @post.body %>
</div>

Refresh the page and see:

Whoops!

The @post variable will only be available after we put it into the socket’s assigns. Let’s initialize it with a blank post. Open editor_live.ex and modify our mount/3 function:

def mount(_params, _session, socket) do
  post = %Post{}
  {:ok, assign(socket, post: post)}
end

In the future, we could retrieve this from some kind of storage, but for now, let's just create a new one each time the page refreshes. Finally, we need to update the Post struct with user input. Update our event handler like this:

def handle_event("render_post", %{"value" => raw}, %{assigns: %{post: post}} = socket) do
  {:ok, post} = Post.render(post, raw)
  {:noreply, assign(socket, post: post)
end

Let's load up http://localhost:4000/editor and see it in action.

Nope, that's not quite right! Phoenix won’t render this as HTML because it’s unsafe user input. We can get around this (very good and useful) security feature by wrapping our content in a raw/1 call. We don’t have a database and user processes are isolated from each other by Elixir. The worst thing a malicious user could do would be crash their own session, which doesn’t bother me one bit.

Check the edit_posts branch for the final version.

Conclusion

That’s a good place to stop for today. We’ve accomplished a lot! We’ve got a dynamically rendering editor that takes user input, processes it and updates the page. And we haven’t written any JavaScript, which means we don’t have to maintain or update any JavaScript. Our server code is built on the rock-solid foundation of the BEAM virtual machine, giving us a great deal of confidence in its reliability and resilience.

In the next post, we’ll tackle making a shared editor, allowing multiple users to edit the same post. This project will highlight Elixir’s concurrency capabilities and demonstrate how LiveView builds on them to enable some incredible user experiences.



  • Code
  • Back-end Engineering

k

CLI Equivalents for Common MAMP PRO and Sequel Pro Tasks

Working on website front ends I sometimes use MAMP PRO to manage local hosts and Sequel Pro to manage databases. Living primarily in my text editor, a terminal, and a browser window, moving to these click-heavy dedicated apps can feel clunky. Happily, the tasks I have most frequently turned to those apps for —starting and stopping servers, creating new hosts, and importing, exporting, deleting, and creating databases— can be done from the command line.

I still pull up MAMP PRO if I need to change a host's PHP version or work with its other more specialized settings, or Sequel Pro to quickly inspect a database, but for the most part I can stay on the keyboard and in my terminal. Here's how:

Command Line MAMP PRO

You can start and stop MAMP PRO's servers from the command line. You can even do this when the MAMP PRO desktop app isn't open.

Note: MAMP PRO's menu icon will not change color to reflect the running/stopped status when the status is changed via the command line.

  • Start the MAMP PRO servers:
/Applications/MAMP PRO.app/Contents/MacOS/MAMP PRO cmd startServers
  • Stop the MAMP PRO servers:
/Applications/MAMP PRO.app/Contents/MacOS/MAMP PRO cmd stopServers
  • Create a host (replace host_name and root_path):
/Applications/MAMP PRO.app/Contents/MacOS/MAMP PRO cmd createHost host_name root_path

MAMP PRO-friendly Command Line Sequel Pro

Note: if you don't use MAMP PRO, just replace the /Applications/MAMP/Library/bin/mysql with mysql.

In all of the following commands, replace username with your user name (locally this is likely root) and database_name with your database name. The -p (password) flag with no argument will trigger an interactive password prompt. This is more secure than including your password in the command itself (like -pYourPasswordHere). Of course, if you're using the default password root is not particular secure to begin with so you might just do -pYourPasswordHere.

Setting the -h (host) flag to localhost or 127.0.0.1 tells mysql to look at what's on localhost. With the MAMP PRO servers running, that will be the MAMP PRO databases.

# with the MAMP PRO servers running, these are equivalent:
# /Applications/MAMP/Library/bin/mysql -h 127.0.0.1 other_options
# and
# /Applications/MAMP/Library/bin/mysql -h localhost other_options

/Applications/MAMP/Library/bin/mysql mysql_options # enter. opens an interactive mysql session
mysql> some command; # don't forget the semicolon
mysql> exit;
  • Create a local database
# with the MAMP PRO servers running
# replace `username` with your username, which is `root` by default
/Applications/MAMP/Library/bin/mysql -h localhost -u username -p -e "create database database_name"

or

# with the MAMP PRO servers running
# replace `username` (`root` by default) and `database_name`
/Applications/MAMP/Library/bin/mysql -h localhost -u username -p # and then enter
mysql> create database database_name; # don't forget the semicolon
mysql> exit

    MAMP PRO's databases are stored in /Library/Application Support/appsolute/MAMP PRO/db so to confirm that it worked you can

ls /Library/Application Support/appsolute/MAMP PRO/db
# will output the available mysql versions. For example I have
mysql56_2018-11-05_16-25-13     mysql57

# If it isn't clear which one you're after, open the main MAMP PRO and click
# on the MySQL "servers and services" item. In my case it shows "Version: 5.7.26"

# Now look in the relevant MySQL directory
ls /Library/Application Support/appsolute/MAMP PRO/db/mysql57
# the newly created database should be in the list
  • Delete a local database
# with the MAMP PRO servers running
# replace `username` (`root` by default) and `database_name`
/Applications/MAMP/Library/bin/mysql -h localhost -u username -p -e "drop database database_name"
  • Export a dump of a local database. Note that this uses mysqldump not mysql.
# to export an uncompressed file
# replace `username` (`root` by default) and `database_name`
/Applications/MAMP/Library/bin/mysqldump -h localhost -u username -p database_name > the/output/path.sql

# to export a compressed file
# replace `username` (`root` by default) and `database_name`
/Applications/MAMP/Library/bin/mysqldump -h localhost -u username -p database_name | gzip -c > the/output/path.gz

  • Export a local dump from an external database over SSH. Note that this uses mysqldump not mysql.

# replace `ssh-user`, `ssh_host`, `mysql_user`, `database_name`, and the output path

# to end up with an uncompressed file
ssh ssh_user@ssh_host "mysqldump -u mysql_user -p database_name | gzip -c" | gunzip > the/output/path.sql

# to end up with a compressed file
ssh ssh_user@ssh_host "mysqldump -u mysql_user -p database_name | gzip -c" > the/output/path.gz
  • Import a local database dump into a local database
# with the MAMP PRO servers running
# replace `username` (`root` by default) and `database_name`
/Applications/MAMP/Library/bin/mysql -h localhost -u username -p database_name < the/dump/path.sql
  • Import a local database dump into a remote database over SSH. Use care with this one. But if you are doing it with Sequel Pro —maybe you are copying a Craft site's database from a production server to a QA server— you might as well be able to do it on the command line.
ssh ssh_user@ssh_host "mysql -u username -p remote_database_name" < the/local/dump/path.sql


For me, using the command line instead of the MAMP PRO and Sequel Pro GUI means less switching between keyboard and mouse, less opening up GUI features that aren't typically visible on my screen, and generally better DX. Give it a try! And while MAMP Pro's CLI is limited to the essentials, command line mysql of course knows no limits. If there's something else you use Sequel Pro for, you may be able to come up with a mysql CLI equivalent you like even better.



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

k

A Parent’s Guide to Working From Home, During a Global Pandemic, Without Going Insane

Though I usually enjoy working from Viget’s lovely Boulder office, during quarantine I am now working from home while simultaneously parenting my 3-year-old daughter Audrey. My husband works in healthcare and though he is not on the front lines battling COVID-19, he is still an essential worker and as such leaves our home to work every day.

Some working/parenting days are great! I somehow get my tasks accomplished, my kid is happy, and we spend some quality time together.

And some days are awful. I have to ignore my daughter having a meltdown and try to focus on meetings, and I wish I wasn’t in this situation at all. Most days are somewhere in the middle; I’m just doing my best to get by.

I’ve seen enough working parent memes and cries for help on social media to know that I’m not alone. There are many parents out there who now get to experience the stress and anxiety of living through a global pandemic while simultaneously navigating ways to stay productive while working from home and being an effective parent. Fun isn’t it?

I’m not an expert on the matter, but I have found a few small things that are making me feel a bit more sane. I hope sharing them will make someone else’s life easier too.

Truths to Accept

First, let’s acknowledge some truths about this new situation we find ourselves in:

Truth 1: We’ve lost something.

Parents have lost more than daycare and schools during this epidemic. We’ve lost any time that we had for ourselves, and that was really valuable. We no longer have small moments in the day to catch up on our personal lives. I no longer have a commute to separate my work duties from my mom duties, or catch up with my friends, or just be quiet.

Truth 2: We’re human.

The reason you can’t be a great employee and a great parent and a great friend and a great partner or spouse all day every day isn’t because you’re doing a bad job, it’s because being constantly wonderful in all aspects of your life is impossible. Pick one or two of those things a day to focus on.

Truth 3: We’re all doing our best.

This is the most important part of this article. Be kind to yourselves. This isn’t easy, and putting so much pressure on yourself that you break isn’t going to make it any easier.

Work from Home Goals

Now that we’ve accepted some truths about our current situation, let’s set some goals.

Goal 1: Do Good Work

At Viget, and wherever you work, with kids or without we all want to make sure that the quality of our work stays up throughout the pandemic and that we can continue to be reliable team members and employees to the best of our abilities.

Goal 2: Stay Sane

We need to figure out ways to do this without sacrificing ourselves entirely. For me, this means fitting my work into normal work hours as much as possible so that I can still have some downtime in the evenings.

Goal 3: Make This Sustainable

None of us knows how long this will last but we may as well begin mentally preparing for a long haul.

Work from Home Rules

Now, there are some great Work from Home Rules that apply to everyone with or without kids. My coworker Paul Koch shared these with the Viget team a Jeremy Bearimy ago and I agree this is also the foundation for working from home with kids.

  1. When you’re in a remote meeting, minimize other windows to stay focused
  2. Set a schedule and avoid chores*
  3. Take breaks away from the screen
  4. Plan your workday on the calendar+
  5. Be mindful of Slack and social media as a distraction
  6. Use timers+
  7. Keep your work area separate from where you relax
  8. Pretend that you’re still WFW
  9. Experiment and figure out what works for you

In the improv spirit I say “Yes, AND….” to these tips. And so, here are my adjusted rules for WFH while kiddos around: These have both been really solid tools for me, so let’s dig in.

Daily flexible schedule for kids

Day Planning: Calendars and Timers

A few small tweaks and adjustments make this even more doable for me and my 3-year-old. First- I don’t avoid chores entirely. If I’m going up and down the stairs all day anyway I might as well throw in a load of laundry while I’m at it. The more I can get done during the day means a greater chance of some down time in the evening.

Each morning I plan my day and Audrey’s day:

My Work Day:

Audrey's Day

Identify times of day you are more likely to be focus and protect them. For me, I know I have a block of time from 5-7a before Audrey wakes up and again during “nap time” from 1-3p.I built a construction paper “schedule” that we update and reorganize daily. We make the schedule together each day. She feels ownership over it and she gets to be the one who tells me what we do next.
Look at your calendar first thing and make adjustments either in your plans or move meetings if you have to.I’m strategic about screen time- I try to schedule it when I have meetings. It also helps to schedule a physical activity before screen time as she is less likely to get bored.
Make goals for your day: Tackle time sensitive tasks first. Take care of things that either your co-workers or clients are waiting on from you first, this will help your day be a lot less stressful. Non-time sensitive tasks come next- these can be done at any time of day.We always include “nap time” even though she rarely naps anymore. This is mostly a time for us both to be alone.

When we make the schedule together it also helps me understand her favorite parts of the day and reminds me to include them.

Once our days are planned, I also use timers to help keep the structure of the day. (I bought a great alarm clock for kids on Amazon that turns colors to signal bedtime and quiet time. It’s been hugely worth it for me.)

Timers for Me:

Timers for Audrey:

More than ever, I rely on a time tracking timer. At Viget we use Harvest to track time, and it has a handy built in timer, but there are many apps or online tools that could help you keep track of your time as well.Audrey knows what time she can come out of her room in the morning. If she wakes up before the light is green she plays quietly in her room.
I need a timer because the days and hours are bleeding together- without tracking as I go it would be really hard for me to remember when I worked on certain projects or know for certain if I gave Viget enough time for the day.She knows how long “nap time” is in the afternoon.
Starting and stopping the timer helps me turn on and off “work mode”, which is a helpful sanity bonus.Perhaps best of all I am not the bad guy! “Sorry honey, the light isn’t green yet and there really isn’t anything mommy can do about it” is my new favorite way to ensure we both get some quiet time.

Work from Home Rules: Updated for Parents

Finally, I have a few more Work from Home Rules for parents to add to the list:

  1. Minimize other windows in remote meetings
  2. Set a schedule and fit in some chores if time allows
  3. Take breaks away from the screen
  4. Schedule both your and your kids’ days
  5. Be mindful of Slack and social media as a distraction
  6. Use timers to track your own time and help your kids understand the day
  7. Keep your work area separate from where you relax
  8. Pretend that you’re still WFW
  9. Experiment and figure out what works for you
  10. Be prepared with a few activities
    • Each morning, have just ONE thing ready to go. This can be a worksheet you printed out, a coloring station setup, a new bag of kinetic sand you just got delivered from Amazon, a kids dance video on YouTube or an iPad game. Recently I started enlisting my mom to read stories on Facetime. The activity doesn’t have to be new each day but (especially for young kids) it has to be handy for you to start up quickly if your schedule changes
  11. Clearly communicate your availability with your team and project PMs
    • Life happens. Some days are going to be hard. Whatever you do, don’t burn yourself out or leave your team hanging. If you need to move a meeting or take a day off, communicate that as early and as clearly as you can.
  12. Take PTO if you can
    • None of us are superheroes. If you’re feeling overwhelmed- take a look at the next few days and figure out which one makes the most sense for you to take a break.
  13. Take breaks to be alone without doing a task
    • Work and family responsibilities have blended together, there’s almost no room for being alone. If you can find some precious alone time don’t use it to fold laundry or clean the bathroom. Just zone out. I think we all really need this.

Last but not least, enjoy your time at home if you can. This is an unusual circumstance and even though it’s really hard, there are parts that are really great too.

If you have some great WFH tips we’d love to hear about them in the comments!




k

So You've Written a Bad Design Take

So you’ve just written a blog post or tweet about why wireframes are becoming obsolete, the dangers of “too accessible” design, or how a certain style of icon creates “cognitive fatigue.”

Your post went viral, but now you’re getting ratioed by rude people on the Internet. That sucks! You were just trying to start a conversation and you probably didn’t deserve all that negativity (except for you, “too accessible” guy).

Most likely, you made one of these common mistakes:

1. You made generalizations about “design”

You, a good user-centered designer, know that you are not your user. Nor are you every designer.

First of all, let's acknowledge that there is no universal definition of design. Even if we narrow it down to software design, it’s still hard to make generalizations. Agency, in-house, product, startup, enterprise, non-profit, website, app, connected hardware, etc. – there are a lot of different work contexts and cultures for people with “designer” in their titles.

"The Design Industry" is not a thing, but even if it were, you don't speak for it. Don’t assume that the kind of design work you do is the universal default.

2. You didn’t share enough context

There are many great design books and few great design blog posts. (There are, to my knowledge, no great design tweets, but I am open to your suggestions.) Writing about design is not well suited to short formats, because context plays such an important role and there’s always a lot of it to cover.

Writing about your work should include as much context as you would include if you were presenting your portfolio for a job interview. What kind of organization did you work for? Who was your client and/or your stakeholders? What was the goal of the project? Your timeline? What was the makeup of your team? What were the notable business rules and constraints? How are you defining effectiveness and success?

Without these kinds of details, it’s not possible for other designers to know if what you’ve written is credible or applicable to them.

3. You were too certain

A blog post doesn’t need to be a dissertation. It’s okay to share hunches and anecdotes, but give the necessary caveats. And if you're making claims about science, bruh, you gotta cite your sources.

Be humble in your takes. Your account of what worked for you and why is more valuable to your peers than making sweeping claims and reheating the same old arguments. Be prepared to be told you’re wrong, and have the humility to realize that your perspective is just your perspective. Real conversations, like good design, are built on feedback and diverse viewpoints.

Together, we can improve the discourse in our information ecosystems. Don't generalize. Give context. Be humble.






k

Boek: “The Wayfinding Handbook”

Een recensie van het boek The Wayfinding Handboek, een uitgebreid naslagwerk over wayfinding bedoeld voor studenten, leraren, professionals en klanten. Hoe pak je een bewegwijzering project aan? Door David Gibson.




k

Book review: Orientation & Identity

Interviews and background stories covered in this book: Orientation & Identity by Erwin K. Bauer.




k

The Book Wayshowing > Wayfinding

A review of the renewed book Wayshowing > Wayfinding from Per Mollerup.




k

designworkplan zoekt per direct wayfinding grafisch ontwerper

designworkplan zoekt per direct een grafisch ontwerper voor onze wayfinding studio in Amsterdam