re Mobility Pricing Relieves Congestion, Helps People Breathe Easier By feedproxy.google.com Published On :: Fri, 01 Jun 2018 19:54:22 +0000 By David Suzuki with contributions from Senior Editor Ian Hanington David Suzuki Foundation By 2002, drivers in London, England, were spending as much as half their commuting time stalled in traffic, contributing to much of the city centre’s dangerous particulate … Continue reading → Full Article Transportation air pollution auto emissions Commuting Eco-Conscious Drivers Transport for London
re Warming Weather Could Reduce the Nutritional Value of Rice By feedproxy.google.com Published On :: Tue, 19 Jun 2018 00:47:21 +0000 UN Environment Press Release Hundreds of millions of people in Asia rely on rice not only as a staple but as their main source of nutrition. But new research suggests the rice they eat will become less nutritious due to … Continue reading → Full Article ET News Food Asia Climate Change nutrition rice
re Video Shows a Man Screaming 'Fake Pandemic' at a Florida Officer By feeds.drudge.com Published On :: Fri, 08 May 2020 17:30:37 -0400 A nearly two-minute, profanity-laced tirade at a code officer at a Miami Beach grocery store is the latest example of mounting tensions in the US over wearing masks to stem the spread of the coronavirus. Full Article news
re Federal Watchdog Backs Reinstating Ousted Vaccine Expert By feeds.drudge.com Published On :: Fri, 08 May 2020 20:23:47 -0400 A federal watchdog is recommending that ousted vaccine expert Rick Bright be reinstated while it investigates whether the Trump administration retaliated against his whistleblower complaints when it removed him from a key post overseeing the coronavirus response, Bright's lawyers said Friday. Full Article news
re The DOJ's Lawless Reversal on Michael Flynn By feeds.drudge.com Published On :: Fri, 08 May 2020 21:30:10 -0400 Randall D. Eliason: The government's motion to dismiss the case against former national security adviser Michael Flynn is like nothing I've ever seen. It's a political screed dressed up as legal analysis, promoting the "deep state" conspiracy fantasies of President Trump. It epitomizes the politicization of the Justice Department under Attorney General William P. Barr. It is, in the truest sense of the word, lawless. Full Article news
re More Than 1,000 Workers at Tyson Plant Have Coronavirus By feeds.drudge.com Published On :: Fri, 08 May 2020 23:58:14 -0400 More than 1,000 workers at the Tyson Foods plant in Waterloo have tested positive for the coronavirus, a county public health leader said Thursday -- more than double the number Gov. Kim Reynolds had said were infected the day before. Full Article news
re Trump Declares, 'I Learned a Lot from Nixon' By feeds.drudge.com Published On :: Sat, 09 May 2020 08:33:24 -0400 During an interview on "Fox and Friends," Trump explained why he chose not to go on a firing spree amid Special Counsel Robert Mueller's Russia investigation a la Nixon's Saturday Night Massacre during the Watergate scandal. "I learned a lot from Richard Nixon: Don't fire people," the President said. "I learned a lot. I study history, and the firing of everybody ... .I should've, in one way," he continued. "But I'm glad I didn't because look at the way it turned out." Full Article news
re Top Colorado Republican Pressures Official to Report False Election Results By feeds.drudge.com Published On :: Sat, 09 May 2020 11:33:22 -0400 U.S. Rep. Ken Buck, who is also the chairman of the Colorado Republican Party, was captured ordering a local party official to report false election results in a primary race for a state Senate seat in a leaked audio recording released earlier this week. Full Article news
re DHS: Secret Service has 11 Current Virus Cases By feeds.drudge.com Published On :: Sat, 09 May 2020 13:31:02 -0400 According to the DHS document, along with the 11 active cases there are 23 members of the Secret Service who have recovered from COVID-19 and an additional 60 employees who are self-quarantining. No details have been provided about which members of the Secret Service are infected or if any have recently been on detail with the president or vice president. Full Article news
re Say Yes, Figure It Out Later. Starting from the Start with Tyler Babin By feedproxy.google.com Published On :: Wed, 03 Jul 2019 13:15:14 +0000 “It’s impossible to move forward while staying the same”. That’s what motivated Tyler Babin, a 25 year old up & coming filmmaker, who hustled his way into his dream job only to leave it to pursue the riskier thing, an even bigger bet – on himself. I’ve had literally hundreds of requests over the years to have someone on the show who isn’t Richard Branson or Brene Brown or {fill in the blank star}…ie. host someone who hasn’t “made it big” and is, instead, on the come-up themselves…someone from within our very own community who has been listening for years, connecting dots, gleaning knowledge and is now taking major action on that. Well THIS is Tyler’s story. If you’ve followed my pal Gary Vaynerchuk, it’s likely you’ve actually seen some of Tyler’s work. For the last 3-4 years, he’s been a whirlwind tour traveling the world with Gary, shooting photo + video, creative directing projects at Vayner… and it all started right here on this show nearly 8 years ago. This episode goes full circle, friends. Also – instead of the usual studio conversation, Tyler and I recorded the show while grabbing a burger & margarita just around the corner […] The post Say Yes, Figure It Out Later. Starting from the Start with Tyler Babin appeared first on Chase Jarvis Photography. Full Article chasejarvisLIVE Podcast adobe content creator creative residency Filmmaking Gary Vaynerchuk photography
re A [big] new challenge—the story behind the Creative Calling book cover By feedproxy.google.com Published On :: Mon, 12 Aug 2019 13:15:00 +0000 When it was time to think about the cover – the whole design package – for my NEW BOOK, Creative Calling, I knew I wanted it to be something different. After all…see if you follow me here… it’s just wrong to make a book about creativity with just any old trend, cliche book cover. Instead, the package needed to embody the ideas within. So when we approached this design challenge of a hard bound book – it had to be meaningful, beautiful, AND stand out in a sea of other books on the shelf. No small task… And consider this: you know that this isn’t just a nice story about the book cover. This is a metaphor for any creative challenge. Like every episode of podcast is full of practical advice….this is the real life story of ups and downs on this process…on how we struggled to overcame the challenge front of us… with costs, design options, time, publisher feedback, and other real-life constraints. In short of EVERY CREATIVE PROCESS. I’ve included 2 live-recorded phone calls with the designers on the project, Lou and Vasco, so you get their take on the creation process, challenges, the concepts behind what we set out to […] The post A [big] new challenge—the story behind the Creative Calling book cover appeared first on Chase Jarvis Photography. Full Article chasejarvisLIVE Podcast bts Creative Calling
re Intuition, Creative Freedom & Doing What You Love with Chris Ballew By feedproxy.google.com Published On :: Wed, 14 Aug 2019 13:15:04 +0000 Today’s episode is going to rock your world … pun fully intended because today’s guest is an actual rock star. You may remember a band called Presidents of the United States of America. They took the world by storm in 1995 with their self titled album, Presidents of the United States of America playing songs like Lump and Peaches. Yes, that’s right. My guest today is frontman Chris Ballew. Chris and I have been friends for years, including collaborating on a music video together and at least one live performance (gotta listen to find out ;). Of course we get into his musical journey, a meteoric rise to success, and then realizing something was missing. We take some deep dives into Chris’ creative process, including his method for capturing his small bits and later using those to write new works, including his new project Casper Babypants. In this episode: Consider what kind of artist you are and how you relate to other artists. For years Chris played in bands, but what he learned about himself is his work is actually solo. Don’t censor yourself while you’re creating. Get it out, no matter how crazy or ridiculous or unusual and then […] The post Intuition, Creative Freedom & Doing What You Love with Chris Ballew appeared first on Chase Jarvis Photography. Full Article chasejarvisLIVE Podcast art Caspar Babypants chris ballew creative process Inspiration music
re Jump into Fear with Jeremy Cowart By feedproxy.google.com Published On :: Wed, 21 Aug 2019 13:00:45 +0000 Jeremy Cowart was named the “Most Influential Photographers on the Internet” by Huffington Post in 2014. He’s the founder of a global photography movement, Help-Portrait, to give back to those in need. As well as many photography projects bridging empathy and creativity into awareness and action. If you’ve been a long time listener / watcher of this show, you’ll recognize Jeremy from one of the first episodes nearly 10 years ago. Jeremy’s vision and ambition have not slowed down. Today on the show, we get into his new book I’m Possible and his biggest project to date, building a hotel where every aspect serves someone in need. We get into facing fears, overcoming doubt, and how to turn the seemingly impossible to possible. In this episode: The fear of having a dream that’s so big. Chasing a dream for a decade or lifetime. How do you take action and get paralyzed because it’s so big? How to chase curiosity despite your fear of starting something new? Whether you’re just starting out or you’re thinking about transitioning from something you love doing and are already good at…. Battling against our inner monologue pulling us away from the thing we know we […] The post Jump into Fear with Jeremy Cowart appeared first on Chase Jarvis Photography. Full Article chasejarvisLIVE Podcast creativity interview jeremy cowart Photographer The Purpose Hotel
re Adaptation, Self-Awareness and Art of the Side Hustle with Chris Guillebeau By feedproxy.google.com Published On :: Wed, 04 Sep 2019 13:08:03 +0000 Chris Guillebeau has traveled to 193 countries. And just to be clear, that is all of the countries recognized on the planet. He is the first person to do it before the age of 35. More importantly, he has built online businesses, side hustles, and mastered the art of a non-conforming lifestyle since he was 19 years old. There’s almost nobody better person equipped to talk about starting lots of businesses. He has a daily podcast called Side Hustle School where he’s featured more than 850 different side hustle businesses + featured many in his new book called 100 Side Hustles. Chris also started half a dozen or more himself, started one of my favorite conferences, The World Domination Summit, and is a New York Times bestselling author of books like the $100 Start Up and The Art of Non-Conformity and many others. This guy is a beast and he’s so savvy, so humble. In this episode: We go into details about some of Chris’ favorite side hustle businesses he’s come across in his podcast & writing this book – what are some of the most common traits and failures. Chris shares his experience with depression, how he’s faced it, […] The post Adaptation, Self-Awareness and Art of the Side Hustle with Chris Guillebeau appeared first on Chase Jarvis Photography. Full Article chasejarvisLIVE Podcast anxiety Chris Guillebeau depression gig economy side gig side hustle
re Everything is Figureoutable with Marie Forleo By feedproxy.google.com Published On :: Fri, 27 Sep 2019 05:21:56 +0000 You know her, the award-winning host, author and speaker, Marie Forleo returns to the podcast to talk about her new book , Everything Is Figureoutable. In the New York Times Best-Selling book, Marie gives readers tactics to look at setbacks positively and overcome obstacles creatively, so you can start reaching your dreams. In this episode, we sit down to talk about how her life experiences influenced the book. She shares stories of fear, failure and always having fun have impacted her life. And we discuss a quote of hers (that I repeat all the time) that can help you get into the creative zone. Enjoy! FOLLOW MARIE: instagram | twitter | website Listen to the Podcast Subscribe Watch the Episode This podcast is brought to you by CreativeLive. CreativeLive is the world’s largest hub for online creative education in photo/video, art/design, music/audio, craft/maker, money/life and the ability to make a living in any of those disciplines. They are high quality, highly curated classes taught by the world’s top experts — Pulitzer, Oscar, Grammy Award winners, New York Times best selling authors and the best entrepreneurs of our times. The post Everything is Figureoutable with Marie Forleo appeared first on Chase Jarvis Photography. Full Article chasejarvisLIVE Podcast creativity entrepreneurship everything is figureoutable marie forleo problem solving
re Imagine What’s Possible – On Stage /w Humans of New York Creator Brandon Stanton By feedproxy.google.com Published On :: Fri, 27 Sep 2019 13:15:23 +0000 My book Creative Calling is out! Thanks for all your love, support, and help getting it out into the world. We kicked off celebrations in Seattle with over 700 people in attendance to talk about Creativity with my good buddy, Humans of New York creator, Brandon Stanton. I recorded the session for you. Hope you enjoy! FOLLOW HUMANS OF NEW YORK: instagram | twitter | website Listen to the Podcast Subscribe This podcast is brought to you by CreativeLive. CreativeLive is the world’s largest hub for online creative education in photo/video, art/design, music/audio, craft/maker, money/life and the ability to make a living in any of those disciplines. They are high quality, highly curated classes taught by the world’s top experts — Pulitzer, Oscar, Grammy Award winners, New York Times best selling authors and the best entrepreneurs of our times. The post Imagine What’s Possible – On Stage /w Humans of New York Creator Brandon Stanton appeared first on Chase Jarvis Photography. Full Article chasejarvisLIVE Podcast Brandon Stanton Creative Calling Humans of New York speaking tour
re Self Reliance + Personal Uprising with John Jantsch By feedproxy.google.com Published On :: Wed, 13 Nov 2019 14:01:38 +0000 John Jantsch is a veteran marketer. He’s written several bestselling books including Duct Tape Marketing and The Referral Engine. He’s out with a new book called the Self-Reliant Entrepreneur: 366 Daily Meditations to Feed Your Soul and Grow Your Business As you might know, I’m a bit of a fan of daily habits, so of course John gives us a little preview into some of the daily explorations of thoughts and writings from notable American authors. Of course, that’s not all… we also get into: We go deep into following your own path and listening to your intuition. What we can learn from rabble rousers of our history and those who embraced counter culture to follow their own beliefs. The role that self-awareness has in pursuing our dreams. and much more. Enjoy! FOLLOW JOHN: facebook | twitter | website Listen to the Podcast Subscribe This podcast is brought to you by CreativeLive. CreativeLive is the world’s largest hub for online creative education in photo/video, art/design, music/audio, craft/maker, money/life and the ability to make a living in any of those disciplines. They are high quality, highly curated classes taught by the world’s top experts — Pulitzer, Oscar, Grammy Award winners, New […] The post Self Reliance + Personal Uprising with John Jantsch appeared first on Chase Jarvis Photography. Full Article Business chasejarvisLIVE Podcast Counter Culture Inspiration marketing meditation
re Resilience and Going Untouchable with Neil Pasricha By feedproxy.google.com Published On :: Wed, 27 Nov 2019 14:15:36 +0000 Neil Pasricha is a bestselling author and podcaster whose work focuses on topics core to all of our lives: gratitude, happiness, failure, resilience, and trust. He’s the author of six books including The Book of Awesome, The Happiness Equation, Awesome Is Everywhere, and his latest book: You Are Awesome. In this episode: We are too thin skinned. No matter how great our achievements, we’re crushed by the simplest things. Neil shares some practical advice to navigate through pain and build resiliency Always do something you’re learning… Or as I like to say, how to give yourself permission to suck There’s a reason why they call something a “practice”. We get into how to let go and allow yourself to be human. and much more Enjoy! FOLLOW NEIL: twitter | website Listen to the Podcast Subscribe This podcast is brought to you by CreativeLive. CreativeLive is the world’s largest hub for online creative education in photo/video, art/design, music/audio, craft/maker, money/life and the ability to make a living in any of those disciplines. They are high quality, highly curated classes taught by the world’s top experts — Pulitzer, Oscar, Grammy Award winners, New York Times best selling authors and the best entrepreneurs […] The post Resilience and Going Untouchable with Neil Pasricha appeared first on Chase Jarvis Photography. Full Article chasejarvisLIVE Podcast creativity habits happiness mindset
re Design Your Life with Creative Calling + Debbie Millman By feedproxy.google.com Published On :: Wed, 04 Dec 2019 14:15:31 +0000 Debbie Millman is one of my dear friends, a powerhouse creative and someone who inspires me every day. When I was developing my online companion class to the Creative Calling book, of course I had to ask Debbie to join me on stage for a conversation around designing our life with intention. Debbie’s insight is pure gold. AND – this is just one of the segments from the class. If you already have my book, you can access the entire class for free. All you need to do is visit www.creativelive.com/creativecalling and sign up there. Enjoy! FOLLOW DEBBIE: instagram | twitter | website Listen to the Podcast Subscribe This podcast is brought to you by CreativeLive. CreativeLive is the world’s largest hub for online creative education in photo/video, art/design, music/audio, craft/maker, money/life and the ability to make a living in any of those disciplines. They are high quality, highly curated classes taught by the world’s top experts — Pulitzer, Oscar, Grammy Award winners, New York Times best selling authors and the best entrepreneurs of our times. The post Design Your Life with Creative Calling + Debbie Millman appeared first on Chase Jarvis Photography. Full Article chasejarvisLIVE Podcast confidence Creative Calling creativeLIVE creativity Debbie Millman design fear
re Redefine Creativity – A conversation with Kevin Rose By feedproxy.google.com Published On :: Wed, 11 Dec 2019 14:15:36 +0000 Today I’m sitting down with investor, serial entrepreneur and all around good human, Kevin Rose. If you’re a long timer listener, you might remember Kevin was part of 30 Days of Genius. Now the tables are turned and I’m in the hot seat as a guest on his podcast, the Kevin Rose Show. Of course, it’s always fun sitting down with one of my long time homies to unpack some of my favorite topics, including: How to build your creative muscle and why it’s becoming more important Standing out and why you’re uniquely qualified. Forgetting the “shoulds” is a must do to uncork our richest lives and much more… Big shoutout to Kevin for having me on the show … and if you haven’t already, be sure to check out his podcast The Kevin Rose Show anywhere you listen to podcasts. Enjoy! FOLLOW KEVIN: instagram | twitter | website Listen to the Podcast Subscribe This podcast is brought to you by CreativeLive. CreativeLive is the world’s largest hub for online creative education in photo/video, art/design, music/audio, craft/maker, money/life and the ability to make a living in any of those disciplines. They are high quality, highly curated classes taught by the world’s top […] The post Redefine Creativity – A conversation with Kevin Rose appeared first on Chase Jarvis Photography. Full Article chasejarvisLIVE Podcast Creative Calling creativity entrepreneurship fear Kevin Rose risk
re Dan Pink: If You Believe In It. Share It. By feedproxy.google.com Published On :: Thu, 19 Dec 2019 14:04:25 +0000 Dan Pink is a bestselling author and was the host & co-executive producer of “Crowd Control”, a television series about human behavior on National Geographic. He’s appeared frequently on NPR, PBS, ABC, CNN, and other TV/radio networks worldwide. His provocative books include Drive, A Whole New Mind, To Sell is Human, and his latest book, When: The Scientific Secrets of Perfect Timing. I love Dan’s books. He’s a ruthlessly practical thinker and in this episode he doesn’t hold back. We get into: How to see trends or unlikely connections across by absorbing and learning from a wide variety of sources, whether that’s audio programs, books, documentaries, or episodes of Silicon Valley. Using lists to track influences, sources, and even random ideas or curiosities to spark new ideas Selling isn’t a dirty word, it’s required to get our ideas out there. If we believe in our work, we have a moral obligation to share it. and so much more… Enjoy! FOLLOW DAN: instagram | twitter | website Listen to the Podcast Subscribe This podcast is brought to you by CreativeLive. CreativeLive is the world’s largest hub for online creative education in photo/video, art/design, music/audio, craft/maker, money/life and the ability to make […] The post Dan Pink: If You Believe In It. Share It. appeared first on Chase Jarvis Photography. Full Article Pop Culture
re There Is Only One You with Clemency Burton-Hill By feedproxy.google.com Published On :: Wed, 01 Jan 2020 15:17:19 +0000 There are 7106 languages on earth and yet there are a few universal languages that transcends the language barrier. In this episode we explore one of the first universal languages of human history: music. My guest today is Clemency Burton-Hill. From underground DJ to the Creative Director at New York Public Radio, she is an author, a musician, and host of multiple podcasts including The Open Ears Project, Classical Fix, and Moments that Made Me. Her latest book, Year of Wonder helps readers explore and experience a new classical musical piece every day. In this episode: Classical music has a bad rap for being stuffy, boring, and largely inaccessible. Clemency expands on what’s available, and how it’s really the soundtrack of our lives. The universality of music and how we use music to explore, express, and share. Of course, Clemency drops so many names of musical artists to explore who are crushing it today. Enjoy! FOLLOW CLEMENCY: instagram | twitter | website Listen to the Podcast Subscribe This podcast is brought to you by CreativeLive. CreativeLive is the world’s largest hub for online creative education in photo/video, art/design, music/audio, craft/maker, money/life and the ability to make a living in […] The post There Is Only One You with Clemency Burton-Hill appeared first on Chase Jarvis Photography. Full Article chasejarvisLIVE Podcast creative director creativity language music passion
re You Are Not Your Ego with Cheri Huber and Ashwini Narayanan By feedproxy.google.com Published On :: Wed, 08 Jan 2020 14:15:53 +0000 Cheri has been a student and teacher of Zen for over 35 years. She is the author of over 20 books on Zen, and founded the Mountain View Zen Center and the Zen Monastery Peace Center. Cheri also founded a non-profit dedicated to transforming lives and ending suffering, Living Compassion, whose primary work is the Africa Vulnerable Children Project in Zambia. Ashwini co-facilitates and creates workshops with Cheri. She runs the operations of the two nonprofits that Cheri founded. Her eclectic background includes degrees in physics, business, and computer science to working in advertising, an investment bank, a social enterprise, and several technology startups in the Silicon Valley. Cheri and Ashwini have co-written multiple books, including their latest Don’t Suffer, Communicate. Today’s episode isn’t just about awareness practice, it’s about a framework for navigating life. A few highlights: Zen isn’t just the practice of keeping things nicely organized, it’s also a spiritual practice largely focused on awareness and where you direct attention. Self-improvement is an endless diss. The very nature of saying we need improvement implies we’re not enough. Cheri and Ashwini share some useful tools to redirect the attention, such as using a recorder to access the wisdom, love, and compassion that is […] The post You Are Not Your Ego with Cheri Huber and Ashwini Narayanan appeared first on Chase Jarvis Photography. Full Article chasejarvisLIVE Podcast awareness ego mindfulness mindset self-improvement suffering zen
re Corey Rich: Good Enough is Never Good Enough By feedproxy.google.com Published On :: Wed, 15 Jan 2020 16:04:51 +0000 Corey Rich is a director, writer, and one of the top action sports photographers of our time. He has built a life and a career around his passions for travel and adventure by documenting some of the world’s greatest athletes in extreme locations spanning the globe. From alpine climbing in Pakistan’s Karakoram Mountains to ultramarathon racing in the Sahara Desert of Morocco, freight-train hopping in the American West, underwater cave exploration in the Yucatan and snowboarding in Papua New Guinea – if you’re an outdoor adventure lover, you’ve likely seen his work gracing the pages of your favorite magazines and video screens. Corey is a long-time friend and a master storyteller, so when he released his latest book, Stories Behind the Images, I couldn’t wait to have him on the show. In this episode, Corey takes us on a journey behind the scenes of his life and career. We get into: Doing what you love. The process of chasing the things we know we’re supposed to be doing in our heart. Sacrifice. I don’t know a single person at the top of their game who hasn’t sacrificed something to be where they are today. Corey reflects on what what he’s sacrificed […] The post Corey Rich: Good Enough is Never Good Enough appeared first on Chase Jarvis Photography. Full Article chasejarvisLIVE Podcast action sports adventure photography climbing corey rich creativity
re Choose Creativity – A Conversation with Jordon Harbinger By feedproxy.google.com Published On :: Wed, 29 Jan 2020 14:14:39 +0000 Recently sat down with my man Jordan Harbinger on his podcast The Jordan Harbinger Show. As a radio personality and a podcaster long before it was cool, Jordan is no stranger to the mic. It was a fun conversation and I hope you enjoy! A few of my fav topics: I share my framework for learning from the masters by deconstructing what they do and applying it My creative slumps and how I dug out How mindset matters and unwinding our self-limiting beliefs and much more … Big shoutout to Jordan for having me on the show … and if you haven’t already, be sure to check out his podcast The Jordan Harbinger Show anywhere you listen to podcasts. Enjoy! FOLLOW JORDAN: instagram| facebook | twitter | website Listen to the Podcast Subscribe This podcast is brought to you by CreativeLive. CreativeLive is the world’s largest hub for online creative education in photo/video, art/design, music/audio, craft/maker, money/life and the ability to make a living in any of those disciplines. They are high quality, highly curated classes taught by the world’s top experts — Pulitzer, Oscar, Grammy Award winners, New York Times best selling authors and the best entrepreneurs of our […] The post Choose Creativity – A Conversation with Jordon Harbinger appeared first on Chase Jarvis Photography. Full Article chasejarvisLIVE Podcast creativity entrepreneur failure fear habit mindset practice
re Rethink Impossible with Colin O’Brady By feedproxy.google.com Published On :: Wed, 12 Feb 2020 14:15:58 +0000 Colin O’Brady is a world record holding explorer and one of the world’s top endurance athletes. Fresh out of college, Colin had a vast world of possibility in front of him when a tragic accident left him hospitalized. Unsure if he’d ever walk again, his injuries covered nearly 25% of his body, primarily damaging his legs and feet. Despite the odds, his mother encouraged him to dream big and he dared to set a seemingly impossible goal that set him on a path to rethink what’s possible. Fast forward to today, and Colin’s list of achievements is staggering. In this episode, we get into many of his harrowing adventures, including his solo, unsupported, unassisted crossing of Antartica. Even if you’re not a professional athlete or have any ambition to break world records, his story will resonate. We all need courage, a strong mindset, and pure grit to overcome obstacles, pursue big dreams, and do the seemingly impossible. A few highlights from our conversation: 1000 NOs paves the way to YES. How failure is only helping us forge and prepare us for the thing we are reaching for. The longest journey is 6 inches between your ears. Colin shares how he discovered mindset […] The post Rethink Impossible with Colin O’Brady appeared first on Chase Jarvis Photography. Full Article chasejarvisLIVE Podcast courage exploration fear grit mindset motivation world record
re Workplace Revolution with Amy Nelson By feedproxy.google.com Published On :: Wed, 19 Feb 2020 16:25:13 +0000 Amy Nelson is the founder and CEO of The Riveter. If you’re not familiar with The Riveter, it’s a modern day union of women and their allies. It’s a community, a workspace and resource that supports women in building business and careers. The Riveter has locations all throughout the US and is growing rapidly. I cannot wait for you to hear this story. Amy Nelson practiced corporate litigation for over a decade in New York City and Seattle and worked in politics under several presidents. But it wasn’t until she was a mother that she started noticing something. Conversations no longer were about her career, but how motherhood would impact her career. Why was it not possible to “have it all”: be the best lawyer, the best wife, and mother? Looking for inspiration, she discovered a telling statistic: 43% of highly trained professional women “off-ramp” after having kids. It was then an idea started to form. In this episode we explore: How a bold concept can go from idea to reality. How Amy raised money and grew a national company in 2.5 years Being a vulnerable leader + the emotional journey of exploring and building something new How can we all […] The post Workplace Revolution with Amy Nelson appeared first on Chase Jarvis Photography. Full Article chasejarvisLIVE Podcast entrepreneurship fear gender gap mother startup the riveter Transition women
re 10 Breaths Back to Love with Kamal Ravikant By feedproxy.google.com Published On :: Wed, 26 Feb 2020 14:15:09 +0000 Kamal Ravikant was in a dark place. After four years of pouring his heart, soul, and money into his tech startup, it blew up. He lost everything – including himself. In a moment of desperation, a vow deep within came to the surface: to love himself. Though it was a bit of a foreign concept, he set out to undo the misery in his head through the lens of love. The practice Kamal formed became the self-published book: Love Yourself Like Your Life Depends on It. It sold over a half a million copies and is now newly expanded. In our conversation Kamal shares his ruthlessly practical way he unwound the negative thoughts and more importantly, made it last. In our conversation we explore: Mindset as a practice, including the 7 minute meditation Kamal uses to break old mental patterns Kamal shares his advice in getting unstuck, including giving yourself time to simply live Our brain is a monkey gone bananas. Pain, joy, loneliness, love are a universal part of the human condition such that no matter our individual circumstance we are all trying to tame it. and much more… Enjoy! FOLLOW KAMAL: instagram | twitter | website Listen to the Podcast […] The post 10 Breaths Back to Love with Kamal Ravikant appeared first on Chase Jarvis Photography. Full Article chasejarvisLIVE Podcast breath meditation mindset writer
re Self-Care Reboot By feedproxy.google.com Published On :: Wed, 11 Mar 2020 13:15:59 +0000 I talk a big game about self-care, but the truth is: life happens. We can’t all be perfect in our self care routines all the time. We’re human. The name of the game is progress, not perfection. But how do we avoid getting so far off track, that the occasional slip turns into a trend? If you’re feeling a bit drained, disconnected, or even sick, it might be time for a reset. In this episode, I share a few strategies I use to help me check-in and course correct. Is it time for a self-care reboot? Enjoy! FOLLOW CHASE: instagram | twitter | website Listen to the Podcast Subscribe This podcast is brought to you by CreativeLive. CreativeLive is the world’s largest hub for online creative education in photo/video, art/design, music/audio, craft/maker, money/life and the ability to make a living in any of those disciplines. They are high quality, highly curated classes taught by the world’s top experts — Pulitzer, Oscar, Grammy Award winners, New York Times best selling authors and the best entrepreneurs of our times. The post Self-Care Reboot appeared first on Chase Jarvis Photography. Full Article chasejarvisLIVE Podcast goals health meditation mindset nutrition self-care sleep wellness
re Create the Change You Seek with Jonah Berger By feedproxy.google.com Published On :: Wed, 08 Apr 2020 13:15:57 +0000 Jonah Berger is a marketing professor at the Wharton School at the University of Pennsylvania and internationally bestselling author of Contagious, Invisible Influence, and The Catalyst. Dr. Berger is a world-renowned expert on change, word of mouth, influence, consumer behavior, and how products, ideas, and behaviors catch on. He has published over 50 articles in top‐tier academic journals, teaches Wharton’s highest rated online course, and popular outlets like The New York Times and Harvard Business Review often cover his work. He’s keynoted hundred of events, and often consults for organizations like Google, Apple, Nike, and the Gates Foundation. Enjoy! FOLLOW JONAH: instagram | twitter | website Listen to the Podcast Subscribe Watch the Episode This podcast is brought to you by CreativeLive. CreativeLive is the world’s largest hub for online creative education in photo/video, art/design, music/audio, craft/maker, money/life and the ability to make a living in any of those disciplines. They are high quality, highly curated classes taught by the world’s top experts — Pulitzer, Oscar, Grammy Award winners, New York Times best selling authors and the best entrepreneurs of our times. The post Create the Change You Seek with Jonah Berger appeared first on Chase Jarvis Photography. Full Article chasejarvisLIVE Podcast
re Finance Fireside Chat with Ramit Sethi By feedproxy.google.com Published On :: Mon, 20 Apr 2020 13:13:53 +0000 In this episode I’m chatting with my long time friend and financial guru, Ramit Sethi. Ramit has been on the show a number of times, and this time we’re connecting virtually from our living rooms during the quarantine. Of course we get into finances during these uncertain times, but more importantly: adaptation and resilience. Over the years, no one has single-handedly given me better insight about the business side of art than the New York Times bestselling author, Ramit Sethi. Take a listen and let us know what you think. Enjoy! This episode was part of CreativeLive TV, a brand-new, free, 24/7 variety show, live-streamed from the very casual living rooms, studios, and kitchen tables of our worldwide community of legendary creators. You can expect musical performances, Q&As, cooking, spoken word, drawing, and more – featuring many of our favorite personalities – all in a safe, virtual space full of joy, shared experiences, and connection via live, interactive chat. The schedule and upcoming broadcasts can be seen at http://creativelive.com/tv FOLLOW RAMIT: instagram | twitter | website Listen to the Podcast Subscribe Watch the Episode This podcast is brought to you by CreativeLive. CreativeLive is the world’s largest hub […] The post Finance Fireside Chat with Ramit Sethi appeared first on Chase Jarvis Photography. Full Article chasejarvisLIVE Podcast creativity entrepreneurship finance money resilience
re Resilience + Reinvention with Canlis Restaurateurs By feedproxy.google.com Published On :: Mon, 27 Apr 2020 21:00:34 +0000 In any uncertain time there, we can both feel anxious, upset, curious and we can also look for opportunities. Opportunities for reinvention, for connection, and community in ways we haven’t seen before. That’s the theme of today’s episode with some of my good friends Mark and Brian Canlis + James Beard Award Winning Chef Brady Williams in a conversation we recorded for CreativeLive TV. Mark and Brian run an iconic restaurant in Seattle named Canlis. It’s been a family business for over 70 years. Faced with these uncertain times, they share how they’ve reinvented their business 3 times over the last couple of months. No matter what industry you’re in, their story of overcoming obstacles, problem solving and heart is wisdom for all of us. Enjoy! FOLLOW CANLIS: instagram | website Listen to the Podcast Subscribe Watch the Episode This podcast is brought to you by CreativeLive. CreativeLive is the world’s largest hub for online creative education in photo/video, art/design, music/audio, craft/maker, money/life and the ability to make a living in any of those disciplines. They are high quality, highly curated classes taught by the world’s top experts — Pulitzer, Oscar, Grammy Award winners, New York Times best selling authors […] The post Resilience + Reinvention with Canlis Restaurateurs appeared first on Chase Jarvis Photography. Full Article chasejarvisLIVE Podcast
re How to Foster Real-Time Client Engagement During Moderated Research By feedproxy.google.com Published On :: Mon, 17 Feb 2020 08:00:00 -0500 When we conduct moderated research, like user interviews or usability tests, for our clients, we encourage them to observe as many sessions as possible. We find when clients see us interview their users, and get real-time responses, they’re able to learn about the needs of their users in real-time and be more active participants in the process. One way we help clients feel engaged with the process during remote sessions is to establish a real-time communication backchannel that empowers clients to flag responses they’d like to dig into further and to share their ideas for follow-up questions. There are several benefits to establishing a communication backchannel for moderated sessions:Everyone on the team, including both internal and client team members, can be actively involved throughout the data collection process rather than waiting to passively consume findings.Team members can identify follow-up questions in real-time which allows the moderator to incorporate those questions during the current session, rather than just considering them for future sessions.Subject matter experts can identify more detailed and specific follow-up questions that the moderator may not think to ask.Even though the whole team is engaged, a single moderator still maintains control over the conversation which creates a consistent experience for the participant.If you’re interested in creating your own backchannel, here are some tips to make the process work smoothly:Use the chat tool that is already being used on the project. In most cases, we use a joint Slack workspace for the session backchannel but we’ve also used Microsoft Teams.Create a dedicated channel like #moderated-sessions. Conversation in this channel should be limited to backchannel discussions during sessions. This keeps the communication consolidated and makes it easier for the moderator to stay focused during the session.Keep communication limited. Channel participants should ask basic questions that are easy to consume quickly. Supplemental commentary and analysis should not take place in the dedicated channel.Use emoji responses. The moderator can add a quick thumbs up to indicate that they’ve seen a question.Introducing backchannels for communication during remote moderated sessions has been a beneficial change to our research process. It not only provides an easy way for clients to stay engaged during the data collection process but also increases the moderator’s ability to focus on the most important topics and to ask the most useful follow-up questions. Full Article Process Research
re Concurrency & Multithreading in iOS By feedproxy.google.com Published On :: Tue, 25 Feb 2020 08:00:00 -0500 Concurrency is the notion of multiple things happening at the same time. This is generally achieved either via time-slicing, or truly in parallel if multiple CPU cores are available to the host operating system. We've all experienced a lack of concurrency, most likely in the form of an app freezing up when running a heavy task. UI freezes don't necessarily occur due to the absence of concurrency — they could just be symptoms of buggy software — but software that doesn't take advantage of all the computational power at its disposal is going to create these freezes whenever it needs to do something resource-intensive. If you've profiled an app hanging in this way, you'll probably see a report that looks like this: Anything related to file I/O, data processing, or networking usually warrants a background task (unless you have a very compelling excuse to halt the entire program). There aren't many reasons that these tasks should block your user from interacting with the rest of your application. Consider how much better the user experience of your app could be if instead, the profiler reported something like this: Analyzing an image, processing a document or a piece of audio, or writing a sizeable chunk of data to disk are examples of tasks that could benefit greatly from being delegated to background threads. Let's dig into how we can enforce such behavior into our iOS applications. A Brief History In the olden days, the maximum amount of work per CPU cycle that a computer could perform was determined by the clock speed. As processor designs became more compact, heat and physical constraints started becoming limiting factors for higher clock speeds. Consequentially, chip manufacturers started adding additional processor cores on each chip in order to increase total performance. By increasing the number of cores, a single chip could execute more CPU instructions per cycle without increasing its speed, size, or thermal output. There's just one problem... How can we take advantage of these extra cores? Multithreading. Multithreading is an implementation handled by the host operating system to allow the creation and usage of n amount of threads. Its main purpose is to provide simultaneous execution of two or more parts of a program to utilize all available CPU time. Multithreading is a powerful technique to have in a programmer's toolbelt, but it comes with its own set of responsibilities. A common misconception is that multithreading requires a multi-core processor, but this isn't the case — single-core CPUs are perfectly capable of working on many threads, but we'll take a look in a bit as to why threading is a problem in the first place. Before we dive in, let's look at the nuances of what concurrency and parallelism mean using a simple diagram: In the first situation presented above, we observe that tasks can run concurrently, but not in parallel. This is similar to having multiple conversations in a chatroom, and interleaving (context-switching) between them, but never truly conversing with two people at the same time. This is what we call concurrency. It is the illusion of multiple things happening at the same time when in reality, they're switching very quickly. Concurrency is about dealing with lots of things at the same time. Contrast this with the parallelism model, in which both tasks run simultaneously. Both execution models exhibit multithreading, which is the involvement of multiple threads working towards one common goal. Multithreading is a generalized technique for introducing a combination of concurrency and parallelism into your program. The Burden of Threads A modern multitasking operating system like iOS has hundreds of programs (or processes) running at any given moment. However, most of these programs are either system daemons or background processes that have very low memory footprint, so what is really needed is a way for individual applications to make use of the extra cores available. An application (process) can have many threads (sub-processes) operating on shared memory. Our goal is to be able to control these threads and use them to our advantage. Historically, introducing concurrency to an app has required the creation of one or more threads. Threads are low-level constructs that need to be managed manually. A quick skim through Apple's Threaded Programming Guide is all it takes to see how much complexity threaded code adds to a codebase. In addition to building an app, the developer has to: Responsibly create new threads, adjusting that number dynamically as system conditions change Manage them carefully, deallocating them from memory once they have finished executing Leverage synchronization mechanisms like mutexes, locks, and semaphores to orchestrate resource access between threads, adding even more overhead to application code Mitigate risks associated with coding an application that assumes most of the costs associated with creating and maintaining any threads it uses, and not the host OS This is unfortunate, as it adds enormous levels of complexity and risk without any guarantees of improved performance. Grand Central Dispatch iOS takes an asynchronous approach to solving the concurrency problem of managing threads. Asynchronous functions are common in most programming environments, and are often used to initiate tasks that might take a long time, like reading a file from the disk, or downloading a file from the web. When invoked, an asynchronous function executes some work behind the scenes to start a background task, but returns immediately, regardless of how long the original task might takes to actually complete. A core technology that iOS provides for starting tasks asynchronously is Grand Central Dispatch (or GCD for short). GCD abstracts away thread management code and moves it down to the system level, exposing a light API to define tasks and execute them on an appropriate dispatch queue. GCD takes care of all thread management and scheduling, providing a holistic approach to task management and execution, while also providing better efficiency than traditional threads. Let's take a look at the main components of GCD: What've we got here? Let's start from the left: DispatchQueue.main: The main thread, or the UI thread, is backed by a single serial queue. All tasks are executed in succession, so it is guaranteed that the order of execution is preserved. It is crucial that you ensure all UI updates are designated to this queue, and that you never run any blocking tasks on it. We want to ensure that the app's run loop (called CFRunLoop) is never blocked in order to maintain the highest framerate. Subsequently, the main queue has the highest priority, and any tasks pushed onto this queue will get executed immediately. DispatchQueue.global: A set of global concurrent queues, each of which manage their own pool of threads. Depending on the priority of your task, you can specify which specific queue to execute your task on, although you should resort to using default most of the time. Because tasks on these queues are executed concurrently, it doesn't guarantee preservation of the order in which tasks were queued. Notice how we're not dealing with individual threads anymore? We're dealing with queues which manage a pool of threads internally, and you will shortly see why queues are a much more sustainable approach to multhreading. Serial Queues: The Main Thread As an exercise, let's look at a snippet of code below, which gets fired when the user presses a button in the app. The expensive compute function can be anything. Let's pretend it is post-processing an image stored on the device. import UIKit class ViewController: UIViewController { @IBAction func handleTap(_ sender: Any) { compute() } private func compute() -> Void { // Pretending to post-process a large image. var counter = 0 for _ in 0..<9999999 { counter += 1 } } } At first glance, this may look harmless, but if you run this inside of a real app, the UI will freeze completely until the loop is terminated, which will take... a while. We can prove it by profiling this task in Instruments. You can fire up the Time Profiler module of Instruments by going to Xcode > Open Developer Tool > Instruments in Xcode's menu options. Let's look at the Threads module of the profiler and see where the CPU usage is highest. We can see that the Main Thread is clearly at 100% capacity for almost 5 seconds. That's a non-trivial amount of time to block the UI. Looking at the call tree below the chart, we can see that the Main Thread is at 99.9% capacity for 4.43 seconds! Given that a serial queue works in a FIFO manner, tasks will always complete in the order in which they were inserted. Clearly the compute() method is the culprit here. Can you imagine clicking a button just to have the UI freeze up on you for that long? Background Threads How can we make this better? DispatchQueue.global() to the rescue! This is where background threads come in. Referring to the GCD architecture diagram above, we can see that anything that is not the Main Thread is a background thread in iOS. They can run alongside the Main Thread, leaving it fully unoccupied and ready to handle other UI events like scrolling, responding to user events, animating etc. Let's make a small change to our button click handler above: class ViewController: UIViewController { @IBAction func handleTap(_ sender: Any) { DispatchQueue.global(qos: .userInitiated).async { [unowned self] in self.compute() } } private func compute() -> Void { // Pretending to post-process a large image. var counter = 0 for _ in 0..<9999999 { counter += 1 } } } Unless specified, a snippet of code will usually default to execute on the Main Queue, so in order to force it to execute on a different thread, we'll wrap our compute call inside of an asynchronous closure that gets submitted to the DispatchQueue.global queue. Keep in mind that we aren't really managing threads here. We're submitting tasks (in the form of closures or blocks) to the desired queue with the assumption that it is guaranteed to execute at some point in time. The queue decides which thread to allocate the task to, and it does all the hard work of assessing system requirements and managing the actual threads. This is the magic of Grand Central Dispatch. As the old adage goes, you can't improve what you can't measure. So we measured our truly terrible button click handler, and now that we've improved it, we'll measure it once again to get some concrete data with regards to performance. Looking at the profiler again, it's quite clear to us that this is a huge improvement. The task takes an identical amount of time, but this time, it's happening in the background without locking up the UI. Even though our app is doing the same amount of work, the perceived performance is much better because the user will be free to do other things while the app is processing. You may have noticed that we accessed a global queue of .userInitiated priority. This is an attribute we can use to give our tasks a sense of urgency. If we run the same task on a global queue of and pass it a qos attribute of background , iOS will think it's a utility task, and thus allocate fewer resources to execute it. So, while we don't have control over when our tasks get executed, we do have control over their priority. A Note on Main Thread vs. Main Queue You might be wondering why the Profiler shows "Main Thread" and why we're referring to it as the "Main Queue". If you refer back to the GCD architecture we described above, the Main Queue is solely responsible for managing the Main Thread. The Dispatch Queues section in the Concurrency Programming Guide says that "the main dispatch queue is a globally available serial queue that executes tasks on the application’s main thread. Because it runs on your application’s main thread, the main queue is often used as a key synchronization point for an application." The terms "execute on the Main Thread" and "execute on the Main Queue" can be used interchangeably. Concurrent Queues So far, our tasks have been executed exclusively in a serial manner. DispatchQueue.main is by default a serial queue, and DispatchQueue.global gives you four concurrent dispatch queues depending on the priority parameter you pass in. Let's say we want to take five images, and have our app process them all in parallel on background threads. How would we go about doing that? We can spin up a custom concurrent queue with an identifier of our choosing, and allocate those tasks there. All that's required is the .concurrent attribute during the construction of the queue. class ViewController: UIViewController { let queue = DispatchQueue(label: "com.app.concurrentQueue", attributes: .concurrent) let images: [UIImage] = [UIImage].init(repeating: UIImage(), count: 5) @IBAction func handleTap(_ sender: Any) { for img in images { queue.async { [unowned self] in self.compute(img) } } } private func compute(_ img: UIImage) -> Void { // Pretending to post-process a large image. var counter = 0 for _ in 0..<9999999 { counter += 1 } } } Running that through the profiler, we can see that the app is now spinning up 5 discrete threads to parallelize a for-loop. Parallelization of N Tasks So far, we've looked at pushing computationally expensive task(s) onto background threads without clogging up the UI thread. But what about executing parallel tasks with some restrictions? How can Spotify download multiple songs in parallel, while limiting the maximum number up to 3? We can go about this in a few ways, but this is a good time to explore another important construct in multithreaded programming: semaphores. Semaphores are signaling mechanisms. They are commonly used to control access to a shared resource. Imagine a scenario where a thread can lock access to a certain section of the code while it executes it, and unlocks after it's done to let other threads execute the said section of the code. You would see this type of behavior in database writes and reads, for example. What if you want only one thread writing to a database and preventing any reads during that time? This is a common concern in thread-safety called Readers-writer lock. Semaphores can be used to control concurrency in our app by allowing us to lock n number of threads. let kMaxConcurrent = 3 // Or 1 if you want strictly ordered downloads! let semaphore = DispatchSemaphore(value: kMaxConcurrent) let downloadQueue = DispatchQueue(label: "com.app.downloadQueue", attributes: .concurrent) class ViewController: UIViewController { @IBAction func handleTap(_ sender: Any) { for i in 0..<15 { downloadQueue.async { [unowned self] in // Lock shared resource access semaphore.wait() // Expensive task self.download(i + 1) // Update the UI on the main thread, always! DispatchQueue.main.async { tableView.reloadData() // Release the lock semaphore.signal() } } } } func download(_ songId: Int) -> Void { var counter = 0 // Simulate semi-random download times. for _ in 0..<Int.random(in: 999999...10000000) { counter += songId } } } Notice how we've effectively restricted our download system to limit itself to k number of downloads. The moment one download finishes (or thread is done executing), it decrements the semaphore, allowing the managing queue to spawn another thread and start downloading another song. You can apply a similar pattern to database transactions when dealing with concurrent reads and writes. Semaphores usually aren't necessary for code like the one in our example, but they become more powerful when you need to enforce synchronous behavior whille consuming an asynchronous API. The above could would work just as well with a custom NSOperationQueue with a maxConcurrentOperationCount, but it's a worthwhile tangent regardless. Finer Control with OperationQueue GCD is great when you want to dispatch one-off tasks or closures into a queue in a 'set-it-and-forget-it' fashion, and it provides a very lightweight way of doing so. But what if we want to create a repeatable, structured, long-running task that produces associated state or data? And what if we want to model this chain of operations such that they can be cancelled, suspended and tracked, while still working with a closure-friendly API? Imagine an operation like this: This would be quite cumbersome to achieve with GCD. We want a more modular way of defining a group of tasks while maintaining readability and also exposing a greater amount of control. In this case, we can use Operation objects and queue them onto an OperationQueue, which is a high-level wrapper around DispatchQueue. Let's look at some of the benefits of using these abstractions and what they offer in comparison to the lower-level GCI API: You may want to create dependencies between tasks, and while you could do this via GCD, you're better off defining them concretely as Operation objects, or units of work, and pushing them onto your own queue. This would allow for maximum reusability since you may use the same pattern elsewhere in an application. The Operation and OperationQueue classes have a number of properties that can be observed, using KVO (Key Value Observing). This is another important benefit if you want to monitor the state of an operation or operation queue. Operations can be paused, resumed, and cancelled. Once you dispatch a task using Grand Central Dispatch, you no longer have control or insight into the execution of that task. The Operation API is more flexible in that respect, giving the developer control over the operation's life cycle. OperationQueue allows you to specify the maximum number of queued operations that can run simultaneously, giving you a finer degree of control over the concurrency aspects. The usage of Operation and OperationQueue could fill an entire blog post, but let's look at a quick example of what modeling dependencies looks like. (GCD can also create dependencies, but you're better off dividing up large tasks into a series of composable sub-tasks.) In order to create a chain of operations that depend on one another, we could do something like this: class ViewController: UIViewController { var queue = OperationQueue() var rawImage = UIImage? = nil let imageUrl = URL(string: "https://example.com/portrait.jpg")! @IBOutlet weak var imageView: UIImageView! let downloadOperation = BlockOperation { let image = Downloader.downloadImageWithURL(url: imageUrl) OperationQueue.main.async { self.rawImage = image } } let filterOperation = BlockOperation { let filteredImage = ImgProcessor.addGaussianBlur(self.rawImage) OperationQueue.main.async { self.imageView = filteredImage } } filterOperation.addDependency(downloadOperation) [downloadOperation, filterOperation].forEach { queue.addOperation($0) } } So why not opt for a higher level abstraction and avoid using GCD entirely? While GCD is ideal for inline asynchronous processing, Operation provides a more comprehensive, object-oriented model of computation for encapsulating all of the data around structured, repeatable tasks in an application. Developers should use the highest level of abstraction possible for any given problem, and for scheduling consistent, repeated work, that abstraction is Operation. Other times, it makes more sense to sprinkle in some GCD for one-off tasks or closures that we want to fire. We can mix both OperationQueue and GCD to get the best of both worlds. The Cost of Concurrency DispatchQueue and friends are meant to make it easier for the application developer to execute code concurrently. However, these technologies do not guarantee improvements to the efficiency or responsiveness in an application. It is up to you to use queues in a manner that is both effective and does not impose an undue burden on other resources. For example, it's totally viable to create 10,000 tasks and submit them to a queue, but doing so would allocate a nontrivial amount of memory and introduce a lot of overhead for the allocation and deallocation of operation blocks. This is the opposite of what you want! It's best to profile your app thoroughly to ensure that concurrency is enhancing your app's performance and not degrading it. We've talked about how concurrency comes at a cost in terms of complexity and allocation of system resources, but introducing concurrency also brings a host of other risks like: Deadlock: A situation where a thread locks a critical portion of the code and can halt the application's run loop entirely. In the context of GCD, you should be very careful when using the dispatchQueue.sync { } calls as you could easily get yourself in situations where two synchronous operations can get stuck waiting for each other. Priority Inversion: A condition where a lower priority task blocks a high priority task from executing, which effectively inverts their priorities. GCD allows for different levels of priority on its background queues, so this is quite easily a possibility. Producer-Consumer Problem: A race condition where one thread is creating a data resource while another thread is accessing it. This is a synchronization problem, and can be solved using locks, semaphores, serial queues, or a barrier dispatch if you're using concurrent queues in GCD. ...and many other sorts of locking and data-race conditions that are hard to debug! Thread safety is of the utmost concern when dealing with concurrency. Parting Thoughts + Further Reading If you've made it this far, I applaud you. Hopefully this article gives you a lay of the land when it comes to multithreading techniques on iOS, and how you can use some of them in your app. We didn't get to cover many of the lower-level constructs like locks, mutexes and how they help us achieve synchronization, nor did we get to dive into concrete examples of how concurrency can hurt your app. We'll save those for another day, but you can dig into some additional reading and videos if you're eager to dive deeper. Building Concurrent User Interfaces on iOS (WWDC 2012) Concurrency and Parallelism: Understanding I/O Apple's Official Concurrency Programming Guide Mutexes and Closure Capture in Swift Locks, Thread Safety, and Swift Advanced NSOperations (WWDC 2015) NSHipster: NSOperation Full Article Code
re Committed to the wrong branch? -, @{upstream}, and @{-1} to the rescue By feedproxy.google.com Published On :: Thu, 27 Feb 2020 00:00:00 -0500 I get into this situation sometimes. Maybe you do too. I merge feature work into a branch used to collect features, and then continue development but on that branch instead of back on the feature branch git checkout feature # ... bunch of feature commits ... git push git checkout qa-environment git merge --no-ff --no-edit feature git push # deploy qa-environment to the QA remote environment # ... more feature commits ... # oh. I'm not committing in the feature branch like I should be and have to move those commits to the feature branch they belong in and take them out of the throwaway accumulator branch git checkout feature git cherry-pick origin/qa-environment..qa-environment git push git checkout qa-environment git reset --hard origin/qa-environment git merge --no-ff --no-edit feature git checkout feature # ready for more feature commits Maybe you prefer git branch -D qa-environment git checkout qa-environment over git checkout qa-environment git reset --hard origin/qa-environment Either way, that works. But it'd be nicer if we didn't have to type or even remember the branches' names and the remote's name. They are what is keeping this from being a context-independent string of commands you run any time this mistake happens. That's what we're going to solve here.Shorthands for longevityI like to use all possible natively supported shorthands. There are two broad motivations for that.Fingers have a limited number of movements in them. Save as many as possible left late in life.Current research suggests that multitasking has detrimental effects on memory. Development tends to be very heavy on multitasking. Maybe relieving some of the pressure on quick-access short term memory (like knowing all relevant branch names) add up to leave a healthier memory down the line.First up for our scenario: the - shorthand, which refers to the previously checked out branch. There are a few places we can't use it, but it helps a lot: Bash # USING - git checkout feature # hack hack hack git push git checkout qa-environment git merge --no-ff --no-edit - # ???? git push # hack hack hack # whoops git checkout - # now on feature ???? git cherry-pick origin/qa-environment..qa-environment git push git checkout - # now on qa-environment ???? git reset --hard origin/qa-environment git merge --no-ff --no-edit - # ???? git checkout - # ???? # on feature and ready for more feature commits Bash # ORIGINAL git checkout feature # hack hack hack git push git checkout qa-environment git merge --no-ff --no-edit feature git push # hack hack hack # whoops git checkout feature git cherry-pick origin/qa-environment..qa-environment git push git checkout qa-environment git reset --hard origin/qa-environment git merge --no-ff --no-edit feature git checkout feature # ready for more feature commits Switch We cannot use - when cherry-picking a range > git cherry-pick origin/-..- fatal: bad revision 'origin/-..-' > git cherry-pick origin/qa-environment..- fatal: bad revision 'origin/qa-environment..-' and even if we could we'd still have provide the remote's name (here, origin).That shorthand doesn't apply in the later reset --hard command, and we cannot use it in the branch -D && checkout approach either. branch -D does not support the - shorthand and once the branch is deleted checkout can't reach it with -: # assuming that branch-a has an upstream origin/branch-a > git checkout branch-a > git checkout branch-b > git checkout - > git branch -D - error: branch '-' not found. > git branch -D branch-a > git checkout - error: pathspec '-' did not match any file(s) known to git So we have to remember the remote's name (we know it's origin because we are devoting memory space to knowing that this isn't one of those times it's something else), the remote tracking branch's name, the local branch's name, and we're typing those all out. No good! Let's figure out some shorthands.@{-<n>} is hard to say but easy to fall in love withWe can do a little better by using @{-<n>} (you'll also sometimes see it referred to be the older @{-N}). It is a special construct for referring to the nth previously checked out ref. > git checkout branch-a > git checkout branch-b > git rev-parse --abbrev-rev @{-1} # the name of the previously checked out branch branch-a > git checkout branch-c > git rev-parse --abbrev-rev @{-2} # the name of branch checked out before the previously checked out one branch-a Back in our scenario, we're on qa-environment, we switch to feature, and then want to refer to qa-environment. That's @{-1}! So instead of git cherry-pick origin/qa-environment..qa-environment We can do git cherry-pick origin/qa-environment..@{-1} Here's where we are (🎉 marks wins from -, 💥 marks the win from @{-1}) Bash # USING - AND @{-1} git checkout feature # hack hack hack git push git checkout qa-environment git merge --no-ff --no-edit - # ???? git push # hack hack hack # whoops git checkout - # ???? git cherry-pick origin/qa-environment..@{-1} # ???? git push git checkout - # ???? git reset --hard origin/qa-environment git merge --no-ff --no-edit - # ???? git checkout - # ???? # ready for more feature commits Bash # ORIGINAL git checkout feature # hack hack hack git push git checkout qa-environment git merge --no-ff --no-edit feature git push # hack hack hack # whoops git checkout feature git cherry-pick origin/qa-environment..qa-environment git push git checkout qa-environment git reset --hard origin/qa-environment git merge --no-ff --no-edit feature git checkout feature # ready for more feature commits Switch One down, two to go: we're still relying on memory for the remote's name and the remote branch's name and we're still typing both out in full. Can we replace those with generic shorthands?@{-1} is the ref itself, not the ref's name, we can't do > git cherry-pick origin/@{-1}..@{-1} origin/@{-1} fatal: ambiguous argument 'origin/@{-1}': unknown revision or path not in the working tree. Use '--' to separate paths from revisions, like this: 'git <command> [<revision>...] -- [<file>...]' because there is no branch origin/@{-1}. For the same reason, @{-1} does not give us a generalized shorthand for the scenario's later git reset --hard origin/qa-environment command.But good news!Do @{u} @{push} @{upstream} or its shorthand @{u} is the remote branch a that would be pulled from if git pull were run. @{push} is the remote branch that would be pushed to if git push was run. > git checkout branch-a Switched to branch 'branch-a' Your branch is ahead of 'origin/branch-a' by 3 commits. (use "git push" to publish your local commits) > git reset --hard origin/branch-a HEAD is now at <the SHA origin/branch-a is at> we can > git checkout branch-a Switched to branch 'branch-a' Your branch is ahead of 'origin/branch-a' by 3 commits. (use "git push" to publish your local commits) > git reset --hard @{u} # <-- So Cool! HEAD is now at <the SHA origin/branch-a is at> Tacking either onto a branch name will give that branch's @{upstream} or @{push}. For example git checkout branch-a@{u} is the branch branch-a pulls from.In the common workflow where a branch pulls from and pushes to the same branch, @{upstream} and @{push} will be the same, leaving @{u} as preferable for its terseness. @{push} shines in triangular workflows where you pull from one remote and push to another (see the external links below).Going back to our scenario, it means short, portable commands with a minimum human memory footprint. (🎉 marks wins from -, 💥 marks the win from @{-1}, 😎 marks the wins from @{u}.) Bash # USING - AND @{-1} AND @{u} git checkout feature # hack hack hack git push git checkout qa-environment git merge --no-ff --no-edit - # ???? git push # hack hack hack # whoops git checkout - # ???? git cherry-pick @{-1}@{u}..@{-1} # ???????? git push git checkout - # ???? git reset --hard @{u} # ???? git merge --no-ff --no-edit - # ???? git checkout - # ???? # ready for more feature commits Bash # ORIGINAL git checkout feature # hack hack hack git push git checkout qa-environment git merge --no-ff --no-edit feature git push # hack hack hack # whoops git checkout feature git cherry-pick origin/qa-environment..qa-environment git push git checkout qa-environment git reset --hard origin/qa-environment git merge --no-ff --no-edit feature git checkout feature # ready for more feature commits Switch Make the things you repeat the easiest to doBecause these commands are generalized, we can run some series of them once, maybe git checkout - && git reset --hard @{u} && git checkout - or git checkout - && git cherry-pick @{-1}@{u}.. @{-1} && git checkout - && git reset --hard @{u} && git checkout - and then those will be in the shell history just waiting to be retrieved and run again the next time, whether with CtrlR incremental search or history substring searching bound to the up arrow or however your interactive shell is configured. Or make it an alias, or even better an abbreviation if your interactive shell supports them. Save the body wear and tear, give memory a break, and level up in Git.And keep goingThe GitHub blog has a good primer on triangular workflows and how they can polish your process of contributing to external projects.The FreeBSD Wiki has a more in-depth article on triangular workflow process (though it doesn't know about @{push} and @{upstream}).The construct @{-<n>} and the suffixes @{push} and @{upstream} are all part of the gitrevisions spec. Direct links to each:@{-<n>}@{push}@{upstream} Full Article Code Front-end Engineering Back-end Engineering
re TrailBuddy: Using AI to Create a Predictive Trail Conditions App By feedproxy.google.com Published On :: Thu, 19 Mar 2020 08:00:00 -0400 Viget is full of outdoor enthusiasts and, of course, technologists. For this year's Pointless Weekend, we brought these passions together to build TrailBuddy. This app aims to solve that eternal question: Is my favorite trail dry so I can go hike/run/ride? While getting muddy might rekindle fond childhood memories for some, exposing your gear to the elements isn’t great – it’s bad for your equipment and can cause long-term, and potentially expensive, damage to the trail. There are some trail apps out there but we wanted one that would focus on current conditions. Currently, our favorites trail apps, like mtbproject.com, trailrunproject.com, and hikingproject.com -- all owned by REI, rely on user-reported conditions. While this can be effective, the reports are frequently unreliable, as condition reports can become outdated in just a few days. Our goal was to solve this problem by building an app that brought together location, soil type, and weather history data to create on-demand condition predictions for any trail in the US. We built an initial version of TrailBuddy by tapping into several readily-available APIs, then running the combined data through a machine learning algorithm. (Oh, and also by bringing together a bunch of smart and motivated people and combining them with pizza and some of the magic that is our Pointless Weekends. We'll share the other Pointless Project, Scurry, with you soon.) Learn More We're hiring Front-End Developers in our Boulder, Chattanooga, Durham, Falls Church and Remote (U.S. Only) offices. Learn more and introduce yourself. The quest for data. We knew from the start this app would require data from a number of sources. As previously mentioned, we used REI’s APIs (i.e. https://www.hikingproject.com/data) as the source for basic trail information. We used the trails’ latitude and longitude coordinates as well as its elevation to query weather and soil type. We also found data points such as a trail’s total distance to be relevant to our app users and decided to include that on the front-end, too. Since we wanted to go beyond relying solely on user-reported metrics, which is how REI’s current MTB project works, we came up with a list of factors that could affect the trail for that day. First on that list was weather. We not only considered the impacts of the current forecast, but we also looked at the previous day’s forecast. For example, it’s safe to assume that if it’s currently raining or had been raining over the last several days, it would likely lead to muddy and unfavorable conditions for that trail. We utilized the DarkSky API (https://darksky.net/dev) to get the weather forecasts for that day, as well as the records for previous days. This included expected information, like temperature and precipitation chance. It also included some interesting data points that we realized may be factors, like precipitation intensity, cloud cover, and UV index. But weather alone can’t predict how muddy or dry a trail will be. To determine that for sure, we also wanted to use soil data to help predict how well a trail’s unique soil composition recovers after precipitation. Similar amounts of rain on trails of very different soil types could lead to vastly different trail conditions. A more clay-based soil would hold water much longer, and therefore be much more unfavorable, than loamy soil. Finding a reliable source for soil type and soil drainage proved incredibly difficult. After many hours, we finally found a source through the USDA that we could use. As a side note—the USDA keeps track of lots of data points on soil information that’s actually pretty interesting! We can’t say we’re soil experts but, we felt like we got pretty close. We used Whimsical to build our initial wireframes. Putting our design hats on. From the very first pitch for this app, TrailBuddy’s main differentiator to peer trail resources is its ability to surface real-time information, reliably, and simply. For as complicated as the technology needed to collect and interpret information, the front-end app design needed to be clean and unencumbered. We thought about how users would naturally look for information when setting out to find a trail and what factors they’d think about when doing so. We posed questions like: How easy or difficult of a trail are they looking for?How long is this trail?What does the trail look like?How far away is the trail in relation to my location?For what activity am I needing a trail for? Is this a trail I’d want to come back to in the future? By putting ourselves in our users’ shoes we quickly identified key features TrailBuddy needed to have to be relevant and useful. First, we needed filtering, so users could filter between difficulty and distance to narrow down their results to fit the activity level. Next, we needed a way to look up trails by activity type—mountain biking, hiking, and running are all types of activities REI’s MTB API tracks already so those made sense as a starting point. And lastly, we needed a way for the app to find trails based on your location; or at the very least the ability to find a trail within a certain distance of your current location. We used Figma to design, prototype, and gather feedback on TrailBuddy. Using machine learning to predict trail conditions. As stated earlier, none of us are actual soil or data scientists. So, in order to achieve the real-time conditions reporting TrailBuddy promised, we’d decided to leverage machine learning to make predictions for us. Digging into the utility of machine learning was a first for all of us on this team. Luckily, there was an excellent tutorial that laid out the basics of building an ML model in Python. Provided a CSV file with inputs in the left columns, and the desired output on the right, the script we generated was able to test out multiple different model strategies, and output the effectiveness of each in predicting results, shown below. We assembled all of the historical weather and soil data we could find for a given latitude/longitude coordinate, compiled a 1000 * 100 sized CSV, ran it through the Python evaluator, and found that the CART and SVM models consistently outranked the others in terms of predicting trail status. In other words, we found a working model for which to run our data through and get (hopefully) reliable predictions from. The next step was to figure out which data fields were actually critical in predicting the trail status. The more we could refine our data set, the faster and smarter our predictive model could become. We pulled in some Ruby code to take the original (and quite massive) CSV, and output smaller versions to test with. Now again, we’re no data scientists here but, we were able to cull out a good majority of the data and still get a model that performed at 95% accuracy. With our trained model in hand, we could serialize that to into a model.pkl file (pkl stands for “pickle”, as in we’ve “pickled” the model), move that file into our Rails app along with it a python script to deserialize it, pass in a dynamic set of data, and generate real-time predictions. At the end of the day, our model has a propensity to predict fantastic trail conditions (about 99% of the time in fact…). Just one of those optimistic machine learning models we guess. Where we go from here. It was clear that after two days, our team still wanted to do more. As a first refinement, we’d love to work more with our data set and ML model. Something that was quite surprising during the weekend was that we found we could remove all but two days worth of weather data, and all of the soil data we worked so hard to dig up, and still hit 95% accuracy. Which … doesn’t make a ton of sense. Perhaps the data we chose to predict trail conditions just isn’t a great empirical predictor of trail status. While these are questions too big to solve in just a single weekend, we'd love to spend more time digging into this in a future iteration. Full Article News & Culture
re Together We Flourish, Remotely By feedproxy.google.com Published On :: Thu, 09 Apr 2020 08:00:00 -0400 Like many other companies, Viget is working through the new challenge of suddenly being a fully-distributed company. We don’t know how long it will last or every challenge that will arise because of these unfortunate circumstances, but we know the health and well-being of our people is paramount. As Employee Engagement Manager, I feel inspired by these new challenges, eager to step up, and committed to seeing what good can come of this. Now more than ever, we want to maintain the culture that has sustained us over the last 20 years – a culture that I think is best captured by our mantra, “do great work and be a great teammate.” As everyone is adjusting to new work environments, schedules, and distractions, I am adjusting my approach to employee engagement, and the People Team is looking for new ways to nurture and protect the culture we treasure. The backbone of being a great teammate is knowing each other and caring about each other. For years the People Team has focused on making sure people who work at Viget are known, accepted, and cared about. From onboarding to events to weekly and monthly touchpoints, we invest in coworkers knowing each other. On top of that, we have well-appointed offices where people like to be, and friendships unfold over time. Abruptly becoming fully distributed makes it impossible for some of these connections to happen organically, like they would have around the coffee machine and the lunch tables. These microinteractions between colleagues in the same office, the hellos when you get off the elevator or the “what’d you get up to this weekend” chit chat near the seltzer refrigerator, all add up. We realize more than ever how valuable those moments are, and I know I will feel extra grateful for them when we are all back together.Until that time, we are working to make sure everyone at Viget feels connected, safe, healthy, and most importantly, together, even when we are physically apart. We are keeping up our weekly staff meetings and monthly team lunches, and we just onboarded a new hire last week as thoroughly as ever. There are some other, new ways we’re sparking connections, too. New ways we're sparking connections: Connecting IntentionallyWe are making the most of the tools that we’ve been using for years. New Slack channels have spun up, including #exercise, where folks are sharing how they are making do without a gym, and #igotyou, a place where folks can post where they’ve found supplies in stock as grocery stores are being emptied at an alarming pace.Remote Lunch TablesWe have teammates in three different time zones, on different project teams, and at different stages of life. We’ve created two virtual lunch tables, one at 12PM EST and one at 12PM MST, where folks can join with or without their lunches and with or without their kids, partners, or pets. There are no rules or structure, just an opportunity to chat and see a friendly face as a touchpoint to your day.Last Weekend This MorningCatching up Monday morning is a great way to kick off your week. Historically, I’ve done this from my desk over coffee as I greet folks coming off the elevator (I usually have the privilege of sitting at our front desk). I now do this from my desk, at home, over coffee as folks pop in or out of our Zoom call. One upshot of the new normal is I can “greet” anyone who shows up, not just people who work from my same office. Again, no structure, just a way to start our week, together.Munch MadnessYes, you read that right. Most of the sports world is enjoying an intermission. Since our CEO can’t cheer on his beloved Cavaliers and our VP of Design can’t cheer on his Gators, we’ve created something potentially much better. A definitive snack bracket. There is a minimal time commitment and folks with no sports knowledge can participate. The rules are simple: create and submit your bracket, ranking who you believe will win each snack faceoff. Then as we move through the rounds, vote on your favorite snacks. The competition has already sparked tons of conversation and plenty of snack hot takes. Want to start a munch-off of your own? Check out our bracket as a starting point.Virtual Happy HoursSigning off for the day and shutting down your machine is incredibly important for maintaining a work-life balance. Casually checking in, unwinding, and being able to chat about your day is also important. We have big, beautiful kitchens in each of our offices, along with casual spaces where at the end of any given day you can find a few Vigets catching up before heading home. This is something we don’t want to miss! So we’re setting up weekly happy hours where folks can hop in and say hi to each other face-to-face. We’ve found Zoom to be a great platform so we can see the maximum number of our teammates possible. Like all of our other events, it’s optional. There is also an understanding that your roommate, kid, significant other, or pet might show up on screen (and are welcome!). No one is shamed for multitasking and we encourage our teammates to join as they can. So far we’ve toasted new teammates, played a song or two, and up next we’ll play trivia. At the end of the day, we are all here for one reason: to do great work. Our award-winning work is made possible by the trust we’ve built within our teams. Staying focused and accountable to ourselves and our clients is what drives our motivation to continue to show up and do our best. In our new working environment, it is crucial that we can both stay connected and productive; a lot of teammates are stepping up to support one another. Here are a few ways we are continuing to foster our “do great work” mantra. New ways we're fostering great work: Staying in TouchThe People Team is actively touching base with every employee. Our focus is on their health, productivity, and connection. These 1:1s have given us a baseline for how we can provide the best support for our team, from making sure they're aware of flexible work options to setting them up with the tools they need to be successful. We’ve delivered chairs, monitors, and helped troubleshoot in-home wifi issues. We are committed to making sure every Viget is set up for success.Sharing is CaringWe’re no stranger to remote teams. We have four offices across the U.S. and a handful of full-time remote folks, and we’ve leaned on our inside experts to share their expertise on remote work. Most recently, ourData & Analytics Director, who has been working remotely full time for five years, gave a presentation on best practices for working from home. His top tips for working from home include: Minimize other windows in remote meetings.Set a schedule and avoid midday chores.Take breaks away from the screen.Plan your workday on your shared calendar.Be mindful of Slack and social media as a distraction.Use timers.Keep your work area separate from where you relax.Pretend that you’re still working from work.Experiment and figure out what works for you. Our UX Research Director also stepped up to share her expertise to aid in adjusting to our new working conditions. She led a microclass on remote facilitation where she shared best practices and went over tools that support remote collaboration. Some of the tools she highlighted included Miro, Mural, Whimsical, and Jamboard. During the microclass she demonstrated use of Whimsical’s voting feature, which makes it easy for distributed groups to establish discussion topic priorities.Always PreparedHaving all of our project materials stored in the Cloud in a consistent, predictable way is a cornerstone of our business continuity plan. It is more important than ever for our team to follow the established best practices and ensure that project files are accessible to the full Viget team in the event of unplanned time off. Our VP of Client Services is leading efforts to ensure everyone is aware of and following our established guidelines with tools like Drive, Slack, Github, and Figma. Our priorities are that clients’ needs are met, quality is high, and timelines are honored. As the pandemic unfolds, our approach to employee engagement will evolve. We have more things in the works to build and maintain connections while distributed, including trivia and game nights, book clubs, virtual movie nights, and community service opportunities, just to name a few. No matter what we’re doing or what tool we’re using to connect, we’ll be in it together: doing great work, being great teammates, and looking forward. Full Article News & Culture
re Unsolved Zoom Mysteries: Why We Have to Say “You’re Muted” So Much By feedproxy.google.com Published On :: Wed, 29 Apr 2020 09:36:00 -0400 Video conference tools are an indispensable part of the Plague Times. Google Meet, Microsoft Teams, Zoom, and their compatriots are keeping us close and connected in a physically distanced world. As tech-savvy folks with years of cross-office collaboration, we’ve laughed at the sketches and memes about vidconf mishaps. We practice good Zoomiquette, including muting ourselves when we’re not talking. Yet even we can’t escape one vidconf pitfall. (There but for the grace of Zoom go I.) On nearly every vidconf, someone starts to talk, and then someone else says: “Oop, you’re muted.” And, inevitably: “Oop, you’re still muted.” That’s right: we’re trying to follow Zoomiquette by muting, but then we forget or struggle to unmute when we do want to talk. In this post, I’ll share my theories for why the You’re Muted Problems are so pervasive, using Google Meet, Microsoft Teams, and Zoom as examples. Spoiler alert: While I hope this will help you be more mindful of the problem, I can’t offer a good solution. It still happens to me. All. The. Time. Skip the why and go straight to the vidconf app keyboard shortcuts you should memorize right now. Why we don't realize we’re muted before talking Why does this keep happening?!? Simply put: UX and design decisions make it harder to remember that you’re muted before you start to talk. Here’s a common scenario: You haven’t talked for a bit, so you haven’t interacted with the Zoom screen for a few seconds. Then you start to talk — and that’s when someone tells you, “You’re muted.” We forget so easily in these scenarios because when our mouse has been idle for a few seconds, the apps hide or downplay the UI elements that tell us we’re muted. Zoom and Teams are the worst offenders: Zoom hides both the toolbar with the main in-app controls (the big mute button) and the mute status indicator on your video pane thumbnail.Teams hides the toolbar, and doesn't show a mute status indicator on your video thumbnail in the first place. Meet is only slightly better: Meet hides the toolbar, and shows only a small mute status icon in your video thumbnail. Even when our mouse is active, the apps’ subtle approach to muted state UI can make it easy to forget that we’re muted: Teams is the worst offender: The mute button is an icon rather than words.The muted-state icon's styling could be confused with unmuted state: Teams does not follow the common pattern of using red to denote muted state.The mute button is not differentiated in visual hierarchy from all the other controls.As mentioned above, Teams never shows a secondary mute status indicator. Zoom is a bit better, but still makes it pretty easy to forget that you’re muted: Pros:Zoom is the only app to use words on the mute button, in this case to denote the button action (rather than the muted state).The muted-state icon’s styling (red line) is less likely to be confused with the unmuted-state icon.Cons:The mute button’s placement (bottom left corner of the page) is easy to overlook.The mute button is not differentiated in visual hierarchy from the other toolbar buttons — and Zoom has a lot of toolbar buttons, especially when logged in as host.The secondary mute status indicator is a small icon.The mute button’s muted-state icon is styled slightly differently from the secondary mute status indicator. Potential Cons:While words denote the button action, only an icon denotes the muted state. Meet is probably the clearest of the three apps, but still has pitfalls: Pros:The mute button is visually prominent in the UI: It’s clearly differentiated in the visual hierarchy relative to other controls (styled as a primary button); is a large button; and is placed closer to the center of the controls bar.The muted-state icon’s styling (red fill) is less likely to be confused with the unmuted-state icon.Cons:Uses only an icon rather than words to denote the muted state.Unrelated Con:While the mute button is visually prominent, it’s also placed next to the hang-up button. So in Meet’s active state you might be less likely to forget you’re muted … but more likely to accidentally hang up when trying to unmute. 😬 I know modern app design leans toward minimalism. There’s often good rationale to use icons rather than words, or to de-emphasize controls and indicators when not in use. But again: This happens on basically every call! Often multiple times per call!! And we’re supposed to be tech-savvy!!! Imagine what it’s like for the tens of millions of vidconf newbs. I would argue that “knowing your muted state” has turned out to be a major vidconf user need. At this point, it’s certainly worth rethinking UX patterns for. Why we keep unsuccessfully unmuting once we realize we’re muted So we can blame the You’re Muted Problem on UX and design. But what causes the You’re Still Muted Problem? Once we know we’re muted, why do we sometimes fail to unmute before talking again? This one is more complicated — and definitely more speculative. To start making sense of this scenario, here’s the sequence I’m guessing most commonly plays out (I did this a couple times before I became aware of it): The crucial part is when the person tries to unmute by pressing the keyboard Volume On/Off key. If that’s in fact what’s happening (again, this is just a hypothesis), I’m guessing they did that because when someone says “You’re muted” or “I can’t hear you,” our subconscious thought process is: “Oh, Audio is Off. Press the keyboard key that I usually press when I want to change Audio Off to Audio On.” There are two traps in this reflexive thought process: First, the keyboard volume keys control the speaker volume, not the microphone volume. (More specifically, they control the system sound output settings, rather than the system sound input settings or the vidconf app’s sound input settings.)In fact, there isn’t a keyboard key to control the microphone volume. You can’t unmute your mic via a dedicated keyboard key, the way that you can turn the speaker volume on/off via a keyboard key while watching a movie or listening to music. Second, I think we reflexively press the keyboard key anyway because our mental model of the keyboard audio keys is just: Audio. Not microphone vs. speaker. This fuzzy mental model makes sense: There’s only one set of keyboard keys related to audio, so why would I think to distinguish between microphone and speaker? So my best guess is hardware design causes the You’re Still Muted Problem. After all, keyboard designs are from a pre-Zoom era, when the average person rarely used the computer’s microphone.If that is the cause, one potential solution is for hardware manufacturers to start including dedicated keys to control microphone volume: Video conference keyboard shortcuts you should memorize right now Let me know if you have other theories for the You’re Still Muted Problem! In the meantime, the best alternative is to learn all of the vidconf app keyboard shortcuts for muting/unmuting: MeetMac: Command(⌘) + DWindows: Control + DTeamsMac: Command(⌘) + Shift + MWindows: Ctrl + Shift + MZoomMac: Command(⌘) + Shift + AWindows: Alt + AHold Spacebar: Temporarily unmute Other vidconf apps not included in my analysis: Cisco Webex MeetingsMac: Ctrl + Alt + MWindows: Ctrl + Shift + M GoToMeeting Mac: No keyboard shortcut? Windows: Ctrl + Alt + A Bonus protip from Jackson Fox: If you use multiple vidconf apps, pick a keyboard shortcut that you like and manually change each app’s mute/unmute shortcut to that. Then you only have to remember one shortcut! Full Article Process User Experience
re A Parent’s Guide to Working From Home, During a Global Pandemic, Without Going Insane By feedproxy.google.com Published On :: Thu, 30 Apr 2020 15:06:00 -0400 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. When you’re in a remote meeting, minimize other windows to stay focusedSet a schedule and avoid chores*Take breaks away from the screenPlan your workday on the calendar+Be mindful of Slack and social media as a distractionUse timers+Keep your work area separate from where you relaxPretend that you’re still WFWExperiment 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 DayIdentify 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: Minimize other windows in remote meetingsSet a schedule and fit in some chores if time allowsTake breaks away from the screenSchedule both your and your kids’ daysBe mindful of Slack and social media as a distractionUse timers to track your own time and help your kids understand the dayKeep your work area separate from where you relaxPretend that you’re still WFWExperiment and figure out what works for youBe prepared with a few activitiesEach 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 changesClearly communicate your availability with your team and project PMsLife 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.Take PTO if you canNone 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.Take breaks to be alone without doing a taskWork 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! Full Article Process News & Culture
re Global Gitignore Files Are Cool and So Are You By feedproxy.google.com Published On :: Wed, 06 May 2020 08:00:00 -0400 Setting it up First, here's the config setup you need to even allow for such a radical concept. Define the global gitignore file as a global Git configuration: git config --global core.excludesfile ~/.gitignore If you're on OSX, this command will add the following config lines in your ~/.gitconfig file. [core] excludesfile = /Users/triplegirldad/.gitignore Load that ~/.gitignore file up with whatever you want. It probably doesn't exist as a file yet so you might have to create it first. Harnessing its incredible power There are only two lines in my global gitignore file and they are both fairly useful pretty much all the time. $ cat ~/.gitignore TODO.md playground This 2 line file means that no matter where I am, what project I'm working on, where in the project I'm doing so, I have an easy space to stash notes, thoughts, in progress ideas, spikes, etc. TODO.md More often than not, I'm fiddling around with a TODO.md file. Something about writing markdown in your familiar text editor speaks to my soul. It's quick, it's easy, you have all the text editing tricks available to you, and it never does anything you wouldn't expect (looking at you auto-markdown-formatting editors). I use one or two # for headings, I use nested lists, and I ask for nothing more. Nothing more than more TODO.md files that is! In practice I tend to just have one TODO.md file per project, right at the top, ready to pull up in a few keystrokes. Which I do often. I pull this doc up if: I'm in a meeting and I just said "oh yeah that's a small thing, I'll knock it out this afternoon". I'm halfway through some feature development and realize I want to make a sweeping refactor elsewhere. Toss some thoughts in the doc, and then get back to the task at hand. It's the end of the day and I have to switch my brain into "feed small children" mode, thus obliterating everything work-related from my short term memory. When I open things up the next day and know exactly what the next thing to dive into was. I'm preparing for a big enough refactor and I can't hold it all in my brain at once. What I'd give to have an interactive 3D playground for brain thoughts, but in the meantime a 2D text file isn't a terrible way to plan out dev work. playground Sometimes you need more than some human words in a markdown file to move an idea along. This is where my playground directory comes in. I can load this directory up with code that's related to a given project and keep it out of the git history. Because who doesn't like a place to play around. I find that this directory is more useful for long running maintenance projects over fast moving greenfield ones. On the maintenance projects, I tend to find myself assembling a pile of scripts and experiments for various situations: The client requests a one-time obscure data export. Whip up some CSV generation code and save that code in the playground directory. The client requests a different obscure data export. Pull up the last time you did something vaguely similar and save yourself the startup time. A batch of data needs to be imported just once. Might as well stash that in the chance that "just once" is actually "just a few times". Kicking the tires on an integration with a third party service. Some of these playground files end up being useful more times than I can count (eg: the ever-changing user_export.rb script). Some items get promoted into application code, which is always fun. But most files here serve their purpose and then wither away. And that's fine. It's a playground, anything goes. Wrapping up Having a personal space for project-specific notes and code has been helpful to me over the years as a developer on multiple projects. If you have your own organizational trick, or just want to brag about how you memorize everything without any markdown files, let me know in the comments below! Full Article Code
re 10 Cool & Free Mobile Wallpapers By feedproxy.google.com Published On :: Wed, 26 Jul 2017 11:03:04 +0000 Guys, great news! Our friends at Freepik has released exclusively for s2o readers 10 Cool & Free Mobile Wallpapers in several awesome styles. They come in AI, EPS and jpg files. The wallpapers are easily resizable for any kind of mobile —or any other project ;)— so you can adapt them in a no time … 10 Cool & Free Mobile Wallpapers Read More » Full Article Freebies
re Freebie: 264 Vector Audio DJ Pack Icons By feedproxy.google.com Published On :: Thu, 28 Dec 2017 16:58:29 +0000 Icons packs are among the most desirable freebies around. There are several out there, going from a wide array of topics from user interfaces to personal finance. But sometimes you can find some rather unusual but clever additions to the icons universe. This Vector Audio DJ Pack is a nice example, brought to you exclusively … Freebie: 264 Vector Audio DJ Pack Icons Read More » Full Article Freebies
re 240 Basic Icons Vector Freebie By feedproxy.google.com Published On :: Sat, 30 Dec 2017 19:53:50 +0000 Flat design is everywhere. Nowadays aesthetics is a lot more simple. No more glossy buttons or gradients background, or what a about the shiny table effect every client asked for?.It is all gone now. In favor of a more “undesigned” look a back to basics trend. Following that idea the guys at your favorite resources … 240 Basic Icons Vector Freebie Read More » Full Article Freebies
re Freaky Logo Friday. Logo Mash-Ups By feedproxy.google.com Published On :: Mon, 01 Jan 2018 13:02:30 +0000 What would happen if the logos of famous brands suddenly wake up in the bed of another? Thats what the new tumblr blog Logo Mashups explores. It makes us think in the in the connections they share and how they are constantly appealing to our consumer mind through the commons grounds of symbology and typography. Full Article Inspiration Provocation
re Wix Video — a great marketing tool for any website. By feedproxy.google.com Published On :: Wed, 17 Jan 2018 19:40:09 +0000 Increases time on page and boosts engagement with your site Thanks to the ever-increasing internet speeds, videos are in high demand. Right now, video is everywhere on social media, websites, and apps. We are watching them on all our screens, desktops, tablets, phones and smart TVs. It is expected a growth in video content up … Wix Video — a great marketing tool for any website. Read More » Full Article Reference
re First impressions of the Fuji X-Pro2 (and the Fujinon 100-400mm lens) By feedproxy.google.com Published On :: Wed, 16 Mar 2016 20:16:47 +0000 Fuji released their new flagship camera this month, the X-Pro2. It is the first X-series camera to feature a 24MP sensor (compared to 16MP before) and it has a very interesting hybrid optical & electronic view finder. When I first […] Full Article Hardware Thoughts
re Why Collaborative Coding Is The Ultimate Career Hack By feedproxy.google.com Published On :: Fri, 24 Apr 2020 10:30:00 +0000 Taking your first steps in programming is like picking up a foreign language. At first, the syntax makes no sense, the vocabulary is unfamiliar, and everything looks and sounds unintelligible. If you’re anything like me when I started, fluency feels impossible. I promise it isn’t. When I began coding, the learning curve hit me — hard. I spent ten months teaching myself the basics while trying to stave off feelings of self-doubt that I now recognize as imposter syndrome. Full Article
re Implementing Dark Mode In React Apps Using styled-components By feedproxy.google.com Published On :: Tue, 28 Apr 2020 10:30:00 +0000 One of the most commonly requested software features is dark mode (or night mode, as others call it). We see dark mode in the apps that we use every day. From mobile to web apps, dark mode has become vital for companies that want to take care of their users’ eyes. Dark mode is a supplemental feature that displays mostly dark surfaces in the UI. Most major companies (such as YouTube, Twitter, and Netflix) have adopted dark mode in their mobile and web apps. Full Article
re How To Succeed In Wireframe Design By feedproxy.google.com Published On :: Wed, 29 Apr 2020 12:30:00 +0000 For the most part, we tend to underestimate things that are familiar to us. It is also very likely that we will underestimate those things that though new, seem very simple to process. And that is correct to some degree. But, when we are faced with complex cases and all measures are taken, a good and solid understanding of the basics could help us to find the right solutions. In this article, we will take a deeper look at one of the most simple, thus, quite often underrated activities in web development that is the design of wireframes. Full Article
re Readability Algorithms Should Be Tools, Not Targets By feedproxy.google.com Published On :: Fri, 01 May 2020 11:30:00 +0000 The web is awash with words. They’re everywhere. On websites, in emails, advertisements, tweets, pop-ups, you name it. More people are publishing more copy than at any point in history. That means a lot of information, and a lot of competition. In recent years a slew of ‘readability’ programs have appeared to help us tidy up the things we write. (Grammarly, Readable, and Yoast are just a handful that come to mind. Full Article