v 7 Reasons Every Photographer Should Learn How to Use Photoshop By feedproxy.google.com Published On :: Thu, 06 Jul 2017 14:45:50 +0000 Many photographers think that learning how to find the ideal location and take a picture at the right time is all they need to know. However, this isn’t the case, and in a world where CGI rivals reality and touch-ups via photo editing software are now seen as a necessity to customers, relying on point and click will kill your photography business. Here are seven reasons every photographer should learn how to use Photoshop. Royalty Free Photo Touch-Ups Are Essential When a family orders school photos, they pay a flat fee for copies of the school pictures and a little more if the child’s name is embossed on the picture. They pay a separate fee if the picture is touched up, whether it is hiding acne or reducing glare on the child’s glasses. Photographers who know how to touch up photos without making it look artificial or cartoonish can ... Read more The post 7 Reasons Every Photographer Should Learn How to Use Photoshop appeared first on Digital Photography Tutorials. Full Article Photo Editing complete Photoshop Course Creating Art from Images frame animation take a picture Use Photoshop
v CSS Vertical Centering – Everything You Need To Know By webdesignerwall.com Published On :: Thu, 22 Dec 2016 13:00:41 +0000 Getting content to center perfectly within an element and then ensuring it responds properly at different screen sizes is one of the biggest challenges that still face front-end designers. It is not that it is difficult, but because there are several ways to go about it, figuring out which method is best can be confusing. […] The post CSS Vertical Centering – Everything You Need To Know appeared first on Web Designer Wall. Full Article Tutorials CSS
v 30 Truly Interactive Websites Built With CSS & JavaScript By webdesignerwall.com Published On :: Tue, 03 Jan 2017 12:00:09 +0000 All websites are somewhat interactive…we click on links or scroll a page, but truly interactive websites take us on a user-driven adventure or draws us in through motion and sound while giving us the power of choice. Interaction can be as simple as a series of clicks that navigate us through a story or landscape, […] The post 30 Truly Interactive Websites Built With CSS & JavaScript appeared first on Web Designer Wall. Full Article Design Trends Inspiration
v Level Up Your CSS Skills With These 20 Pro CSS Tips By webdesignerwall.com Published On :: Thu, 26 Jan 2017 17:00:41 +0000 Front-end development is quickly becoming more and more focused on efficiency – faster loading and rendering through selector choice and minimizing code. Pre-processors like Less and SCSS go a long way in doing some of the work for us, but there are plenty of ways to write minimal, quick CSS the native way. This guide […] The post Level Up Your CSS Skills With These 20 Pro CSS Tips appeared first on Web Designer Wall. Full Article Tutorials CSS
v Four Elements of Truly Mobile-Friendly Responsive Menus By webdesignerwall.com Published On :: Wed, 01 Feb 2017 16:00:23 +0000 There are hundreds of ways to create responsive navigation, limited only by your creativity and the boundaries of what CSS can accomplish. Good responsive navigation is a little harder – a responsive menu must become a mobile menu, adhering to the needs and rules of touch-driven devices. Mobile design is rapidly changing, and so the […] The post Four Elements of Truly Mobile-Friendly Responsive Menus appeared first on Web Designer Wall. Full Article Tutorials CSS jQuery
v Warning: Avoid This Scam Targeting Photographers By feedproxy.google.com Published On :: Wed, 07 Jun 2017 07:04:25 +0000 Over at All Things Photo, I’ve shared a video detailing a scam targeting photographers selling prints online. Also included in the video are 7 tips to avoid being scammed online. While the video is on the long side it’s worth a listen to protect yourself and learn the limitations of fraud protection with your bank and insurance companies. If you’re driving you can also listen to the podcast recording via the All Things Photo podcast. If you haven’t already I welcome you to follow All Things Photo on YouTube, Twitter and Facebook. Full Article All Things Photo Photography Podcast
v How I Evaluate Crowdfunding Projects: Kickstarter, Indiegogo & Beyond By feedproxy.google.com Published On :: Tue, 01 Aug 2017 07:01:19 +0000 13 Questions You Should Ask Before Backing A Crowdfunding Project on Kickstarter, Indiegogo and Beyond Full Article Featured Photography Technology Tips & Tricks Crowdfunded Crowdfunding Indiegogo Kickstarter
v From The Archives: Toronto, Canada 2019 By feedproxy.google.com Published On :: Fri, 20 Mar 2020 09:22:56 PDT Parkdale. Toronto, Canada 2019 Follow me @benhuang.photography Full Article From The Archives benhuangphotography canada landsdowne parkdale residential streetphotography toronto winter カナダ トロント パークデール ランスドーン 住宅区 冬 街撮り
v From The Archive: Tokyo, Japan 2012 By feedproxy.google.com Published On :: Fri, 27 Mar 2020 12:09:00 PDT Ginza. Tokyo, Japan 2012 Follow me @benhuang.photography Full Article From The Archives aquarium benhuangphotography citylife fish Japan photographs streetphotography tourist アクアリウム 日本 東京 街撮り 観光者 都会生活 魚
v From The Archives: Minamisoma, Japan 2014 By feedproxy.google.com Published On :: Fri, 03 Apr 2020 13:34:04 PDT Minamisoma, Japan 2014 Follow me @benhuang.photography Full Article From The Archives 311 benhuangphotography festival Fukushima greateastjapanearthquake horse Japan Minamisoma samurai Tohoku tsunami まつり ドキュメンタリー 南相馬 東北 東日本大震災 津波 被災地 野馬追
v From The Archives: Tokyo, Japan 2012 By feedproxy.google.com Published On :: Sat, 11 Apr 2020 05:59:42 PDT Ginza. Tokyo, Japan 2012 Follow me @benhuang.photography Full Article From The Archives benhuangphotography citylife crow ginza Japan pedestrians streetphotography カラス 日本 東京 歩行者 街撮り 都会生活 銀座
v From The Archives: Rikuzentakata, Japan 2019 By feedproxy.google.com Published On :: Fri, 17 Apr 2020 12:51:27 PDT Seagate. Rikuzentakata, Japan 2019 Follow me @benhuang.photography Full Article From The Archives benhuangphotography coast gate iwate Japan landscape lindustrial rikuzentakata seawall Tohoku 岩手 日本 東北 水門 沿岸 防潮堤 陸前高田 風景写真
v From The Archives: Toronto, Canada 2020 By feedproxy.google.com Published On :: Sat, 25 Apr 2020 11:55:14 PDT Yonge Street. Toronto, Canada 2020 Follow me @benhuang.photography Full Article From The Archives benhuangphotography canada downtown pedestrian streetphotography toronto yongestreet カナダ ダウンタウン トロント 歩行者 街撮り
v From The Archives: Tokyo, Japan 2012 By feedproxy.google.com Published On :: Fri, 01 May 2020 09:56:38 PDT Ikebukuro. Tokyo, Japan 2012 Follow me @benhuang.photography Full Article From The Archives benhuangphotography ikebukuro line red restaurant streetphotography urbanlife 東京 池袋 真っ赤 行列 街撮り 都会生活 飲食店
v From The Archives: Minamisoma, Japan 2014 By feedproxy.google.com Published On :: Fri, 08 May 2020 10:42:40 PDT Minamisoma, Japan 2014 Follow me @benhuang.photography Full Article From The Archives 311 benhuangphotography brokenthings construction debris documentaryphotography Fukushima greateastjapanearthquake Japan Minamisoma Tohoku tsunami ドキュメンタリー フォトジャーナリズム 南相馬 壊れたもの 工事 東北 東日本大震災 津波 瓦礫 福島 被災地
v HTC One Review: Top Of The Premium Pops? By unlimitedcellphoneplansblog.wordpress.com Published On :: Mon, 07 Mar 2016 12:13:07 +0000 UPDATE: After spending an extensive amount of time with the HTC One we have added our thoughts regarding the handset’s battery life. Click here to find out what we reckon. The HTC One is the latest Android handset from the Taiwanese manufacturer and is aimed firmly at the flagship end of the market, featuring a … Continue reading HTC One Review: Top Of The Premium Pops? → Full Article Uncategorized
v Giant Icebergs Play Key Role in Removing CO2 From the Atmosphere By feedproxy.google.com Published On :: Tue, 12 Jan 2016 11:25:29 +0000 By The University of Sheffield Giant icebergs leave trail of carbon sequestration in their wake – a month after they have passed Geographers analysed 175 satellite images of ocean colour which is an indicator of phytoplankton productivity at the ocean’s … Continue reading → Full Article Cryosphere ET News carbon sequestration CO2 co2 reduction icebergs phytoplankton
v James Hansen’s Climate Bombshell: Dangerous Sea Level Rise Will Occur in Decades, Not Centuries By feedproxy.google.com Published On :: Wed, 23 Mar 2016 11:00:15 +0000 By Lauren McCauley Common Dreams Even scientists who question findings say ‘we ignore James Hansen at our peril.’ Dr. James Hansen, the former NASA scientist who is widely credited with being one of the first to raise concerns about human-caused … Continue reading → Full Article Ocean Dr. James Hansen Global Warming sea level rise
v After 30 Years Studying Climate, Scientist Declares: “I’ve Never Been as Worried as I Am Today” By feedproxy.google.com Published On :: Sat, 15 Dec 2018 00:13:19 +0000 By Jake Johnson Common Dreams And colleague says “global warming” no longer strong enough term. “Global heating is technically more correct because we are talking about changes in the energy balance of the planet.” Declaring that after three decades of … Continue reading → Full Article Points of View & Opinions Climate Change Global Warming global warming denial
v How To Build a Website That Your Users Will Love By justcreative.com Published On :: Sat, 02 May 2020 03:35:24 +0000 Find out what users love and hate and how to build the best website for your audience. From content and navigation to design and hosting, use our 5 top tips. Full Article Guest Articles Web Design & UX UX
v How to Master the Elevator Pitch & Leave a Great First Impression By justcreative.com Published On :: Mon, 04 May 2020 06:12:24 +0000 Want to master the elevator pitch and leave a great first impression? Use this easy formula to help communicate what you do in a concise pitch! Full Article Business Elevator Pitch
v How to Grow Your Sales and Leads During the Coronavirus Pandemic By justcreative.com Published On :: Wed, 06 May 2020 10:16:17 +0000 Try these 10 actionable steps for streamlined, cost-effective marketing during the lockdown. Shed costs and embrace innovation to drive leads and conversions. Full Article Blogging & Content Marketing Guest Articles Content Marketing Marketing
v The Strategic Pyramid – Brand Purpose, Mission, Vision & Values By justcreative.com Published On :: Fri, 08 May 2020 01:18:35 +0000 Do you know the difference between a mission and a vision? Or the difference between a purpose and a goal? Don’t worry, you’re not the only one. Let's clarify! Full Article Branding Brand Strategy
v 7 Vital Components of a Successful Brand Strategy By justcreative.com Published On :: Fri, 08 May 2020 06:20:02 +0000 A brand strategy is a long-term plan that affects every facet of your business, but creating one can be confusing. We break it down into 7 essential components. Full Article Branding Guest Articles brBrand Strategy
v How To Get Effective Help With Writing Tasks That Will Boost Your Own Writing Skills By icanbecreative.com Published On :: Tue, 10 Mar 2020 05:21:10 PDT Writing is a quite ambivalent word. For some students, it causes their worst nightmares to come to mind (or it is just a boring assignment) and for some, it’s the fun way to express their thoughts to... Full Article Review
v Creative Ways To Earn Extra Money In Your Downtime By icanbecreative.com Published On :: Wed, 11 Mar 2020 08:31:20 PDT Many people have regular jobs that they love, and which enable them to use their creative skills to make money. This could be anything from coding video games to being an expert in SEO or designing... Full Article Learning
v Vibrant Flat Vector Planets Illustration - Free Download Pack By icanbecreative.com Published On :: Wed, 11 Mar 2020 10:57:49 PDT The galaxy is a mesmerizing place, even better throught the eyes of visual design artists around our globe, we're delighted to release another freebie for our design community. This flat vector... Full Article Vector
v Profession Of The Future: Why Is Programmer Education Still Relevant? By icanbecreative.com Published On :: Mon, 16 Mar 2020 08:07:37 PDT In 2020, there is no doubt that people and technology will be very close friends in the future. The modern inhabitant of our planet spends about 45% of his time connecting with technology. We are... Full Article Learning
v The Best Way To Improve Your Business Skills By icanbecreative.com Published On :: Mon, 16 Mar 2020 08:40:10 PDT Are you thinking about running a business after getting a degree? This article will help you find the best ways to make your business skills more efficient and useful. The Best Way To Improve Your... Full Article Business
v Which Graphics Editor To Choose For The Novice By icanbecreative.com Published On :: Thu, 19 Mar 2020 09:59:19 PDT Photos and other images are used in different fields, so those who know how to work with high-resolution mockups are in demand as professionals. It is useful to be able to take photos, draw, edit... Full Article Learning
v Top 5 Best Internet Live Support Extension To Increase Customers Interactions By icanbecreative.com Published On :: Fri, 27 Mar 2020 03:19:08 PDT Creative interactions call for creative measures - numerous extensions reduce, minimize or dilute the frustration of the customers and resolve issues quickly without the customer support team need.... Full Article Learning
v Which Programming Language Should Mobile Developers Choose? By icanbecreative.com Published On :: Fri, 27 Mar 2020 08:11:50 PDT When building new apps, the most important thing developers must decide is which language to program in. There are several languages out there, and some are preferred for certain operating... Full Article Learning
v How To Restore Hard Drive From A Time Machine + Other Ways By icanbecreative.com Published On :: Sun, 29 Mar 2020 06:25:37 PDT Have you chosen Mac for its reliable system? They really have a lot of advantages and are of the best quality. Mac users don’t face serious problems with hard drives often. But the reality is such... Full Article Learning
v Advanced Photography Tips And Hints By icanbecreative.com Published On :: Sat, 25 Apr 2020 23:54:17 PDT It is in every case critical to pay special mind to any computerized photography insights and tips. A few people can truly take awesome photos without truly trying, yet most of us need whatever... Full Article Learning
v Creative Marketing Strategies For Law Firms To Engage With Potential Clients By icanbecreative.com Published On :: Sun, 26 Apr 2020 15:20:57 PDT The success of any organization strongly depends on the marketing strategies they use to reach their potential customers. Law firms are no exception since they also operate in a competitive field... Full Article Marketing
v What Stephen Hawking Taught Us About Living with Disability By feedproxy.google.com Published On :: Monday, March 19, 2018 - 9:16am Stephen Hawking, a world-renowned scientist who recently passed away, had a brilliant mind that was trapped inside a paralyzed body, and I could not stop thinking about how the opposite is often the case with traumatic brain injury. Full Article
v Is Caregiving a Burden? By feedproxy.google.com Published On :: Monday, March 26, 2018 - 10:10am The truth is, all family members are both a source of joy and a burden at one time or another. That’s what family life is: the art of weaving webs of joy between strands of pain is what creates the intricate fabric of family love. It’s not the people in our care who burden us; it’s our anger over circumstances... Full Article
v Loosening the Caregiver's Grip By feedproxy.google.com Published On :: Monday, June 11, 2018 - 12:47pm It happens slowly, like that metaphorical frog you’ve heard about. Possessiveness and controlling behavior in TBI caregivers is something that creeps up on you, and I suspect it is common — not because people are trying to be annoying, but because they care so much and want to see that their loved one is treated well in every respect. Full Article
v Never Stop Asking 'What If?' By feedproxy.google.com Published On :: Monday, July 16, 2018 - 6:26am We imagine the what-ifs as a worst case scenario, our worst nightmare happening to us, our life falling apart. But here’s another way of looking at it. Full Article
v To Love What Is: A Marriage Transformed By feedproxy.google.com Published On :: Monday, August 20, 2018 - 2:46pm I wish I had found Alix Kates Shulman’s memoir "To Love What Is: A Marriage Transformed" in the first month of my husband’s severe TBI, and yet I may not have absorbed it the way I did reading it fifteen years post-injury. Full Article
v The Unspoken Shame of Anger in Caregiving By feedproxy.google.com Published On :: Monday, December 17, 2018 - 9:10am I didn’t even know who or what I was angry at. Fate? Bad luck? The person who hit my husband with her car? Full Article
v Book Review: Love You Hard by Abby Maslin By feedproxy.google.com Published On :: Monday, January 21, 2019 - 8:33am This book packs a lot of wisdom. You’ll learn about aphasia; you’ll understand ambiguous loss; you’ll follow Abby down dark hallways and into sunlit rooms and learn what it means to own a life built on raw truth. Full Article
v Neural network generates convincing songs by famous singers By flowingdata.com Published On :: Thu, 30 Apr 2020 19:25:39 +0000 Jukebox from OpenAI is a generative model that makes music in the same…Tags: Jukebox, music, neural network, OpenAI Full Article Statistics Jukebox music neural network OpenAI
v Comparing Covid-19 models By flowingdata.com Published On :: Tue, 05 May 2020 07:44:30 +0000 FiveThirtyEight compared six Covid-19 models for a sense of where we might be…Tags: coronavirus, FiveThirtyEight, modeling Full Article Statistics coronavirus FiveThirtyEight modeling
v Coronavirus testing accuracy By flowingdata.com Published On :: Tue, 05 May 2020 12:45:44 +0000 Medical tests do not always provide certain results. Quartz illustrated this with the…Tags: coronavirus, Quartz, testing, uncertainity Full Article Infographics coronavirus Quartz testing uncertainity
v Possible vaccine timelines By flowingdata.com Published On :: Wed, 06 May 2020 08:40:38 +0000 It’d be great if we could conjure a vaccine or a “cure” seemingly…Tags: coronavirus, New York Times, Stuart A. Thompson, vaccine Full Article Infographics coronavirus New York Times Stuart A. Thompson vaccine
v Who should receive care first, an ethical dilemma By flowingdata.com Published On :: Thu, 07 May 2020 07:04:43 +0000 At greater disparities between low resources and high volumes of sick people, doctors…Tags: coronavirus, Feilding Cage, healthcare, policy, Reuters Full Article Infographics coronavirus Feilding Cage healthcare policy Reuters
v Markdown Comes Alive! Part 1, Basic Editor By feedproxy.google.com Published On :: Wed, 26 Feb 2020 08:00:00 -0500 In my last post, I covered what LiveView is at a high level. In this series, we’re going to dive deeper and implement a LiveView powered Markdown editor called Frampton. This series assumes you have some familiarity with Phoenix and Elixir, including having them set up locally. Check out Elizabeth’s three-part series on getting started with Phoenix for a refresher. This series has a companion repository published on GitHub. Get started by cloning it down and switching to the starter branch. You can see the completed application on master. Our goal today is to make a Markdown editor, which allows a user to enter Markdown text on a page and see it rendered as HTML next to it in real-time. We’ll make use of LiveView for the interaction and the Earmark package for rendering Markdown. The starter branch provides some styles and installs LiveView. Rendering Markdown Let’s set aside the LiveView portion and start with our data structures and the functions that operate on them. To begin, a Post will have a body, which holds the rendered HTML string, and title. A string of markdown can be turned into HTML by calling Post.render(post, markdown). I think that just about covers it! First, let’s define our struct in lib/frampton/post.ex: defmodule Frampton.Post do defstruct body: "", title: "" def render(%__MODULE{} = post, markdown) do # Fill me in! end end Now the failing test (in test/frampton/post_test.exs): describe "render/2" do test "returns our post with the body set" do markdown = "# Hello world!" assert Post.render(%Post{}, markdown) == {:ok, %Post{body: "<h1>Hello World</h1> "}} end end Our render method will just be a wrapper around Earmark.as_html!/2 that puts the result into the body of the post. Add {:earmark, "~> 1.4.3"} to your deps in mix.exs, run mix deps.get and fill out render function: def render(%__MODULE{} = post, markdown) do html = Earmark.as_html!(markdown) {:ok, Map.put(post, :body, html)} end Our test should now pass, and we can render posts! [Note: we’re using the as_html! method, which prints error messages instead of passing them back to the user. A smarter version of this would handle any errors and show them to the user. I leave that as an exercise for the reader…] Time to play around with this in an IEx prompt (run iex -S mix in your terminal): iex(1)> alias Frampton.Post Frampton.Post iex(2)> post = %Post{} %Frampton.Post{body: "", title: ""} iex(3)> {:ok, updated_post} = Post.render(post, "# Hello world!") {:ok, %Frampton.Post{body: "<h1>Hello world!</h1> ", title: ""}} iex(4)> updated_post %Frampton.Post{body: "<h1>Hello world!</h1> ", title: ""} Great! That’s exactly what we’d expect. You can find the final code for this in the render_post branch. LiveView Editor Now for the fun part: Editing this live! First, we’ll need a route for the editor to live at: /editor sounds good to me. LiveViews can be rendered from a controller, or directly in the router. We don’t have any initial state, so let's go straight from a router. First, let's put up a minimal test. In test/frampton_web/live/editor_live_test.exs: defmodule FramptonWeb.EditorLiveTest do use FramptonWeb.ConnCase import Phoenix.LiveViewTest test "the editor renders" do conn = get(build_conn(), "/editor") assert html_response(conn, 200) =~ "data-test="editor"" end end This test doesn’t do much yet, but notice that it isn’t live view specific. Our first render is just the same as any other controller test we’d write. The page’s content is there right from the beginning, without the need to parse JavaScript or make API calls back to the server. Nice. To make that test pass, add a route to lib/frampton_web/router.ex. First, we import the LiveView code, then we render our Editor: import Phoenix.LiveView.Router # … Code skipped ... # Inside of `scope "/"`: live "/editor", EditorLive Now place a minimal EditorLive module, in lib/frampton_web/live/editor_live.ex: defmodule FramptonWeb.EditorLive do use Phoenix.LiveView def render(assigns) do ~L""" <div data-test=”editor”> <h1>Hello world!</h1> </div> """ end def mount(_params, _session, socket) do {:ok, socket} end end And we have a passing test suite! The ~L sigil designates that LiveView should track changes to the content inside. We could keep all of our markup in this render/1 method, but let’s break it out into its own template for demonstration purposes. Move the contents of render into lib/frampton_web/templates/editor/show.html.leex, and replace EditorLive.render/1 with this one liner: def render(assigns), do: FramptonWeb.EditorView.render("show.html", assigns). And finally, make an EditorView module in lib/frampton_web/views/editor_view.ex: defmodule FramptonWeb.EditorView do use FramptonWeb, :view import Phoenix.LiveView end Our test should now be passing, and we’ve got a nicely separated out template, view and “live” server. We can keep markup in the template, helper functions in the view, and reactive code on the server. Now let’s move forward to actually render some posts! Handling User Input We’ve got four tasks to accomplish before we are done: Take markdown input from the textarea Send that input to the LiveServer Turn that raw markdown into HTML Return the rendered HTML to the page. Event binding To start with, we need to annotate our textarea with an event binding. This tells the liveview.js framework to forward DOM events to the server, using our liveview channel. Open up lib/frampton_web/templates/editor/show.html.leex and annotate our textarea: <textarea phx-keyup="render_post"></textarea> This names the event (render_post) and sends it on each keyup. Let’s crack open our web inspector and look at the web socket traffic. Using Chrome, open the developer tools, navigate to the network tab and click WS. In development you’ll see two socket connections: one is Phoenix LiveReload, which polls your filesystem and reloads pages appropriately. The second one is our LiveView connection. If you let it sit for a while, you’ll see that it's emitting a “heartbeat” call. If your server is running, you’ll see that it responds with an “ok” message. This lets LiveView clients know when they've lost connection to the server and respond appropriately. Now, type some text and watch as it sends down each keystroke. However, you’ll also notice that the server responds with a “phx_error” message and wipes out our entered text. That's because our server doesn’t know how to handle the event yet and is throwing an error. Let's fix that next. Event handling We’ll catch the event in our EditorLive module. The LiveView behavior defines a handle_event/3 callback that we need to implement. Open up lib/frampton_web/live/editor_live.ex and key in a basic implementation that lets us catch events: def handle_event("render_post", params, socket) do IO.inspect(params) {:noreply, socket} end The first argument is the name we gave to our event in the template, the second is the data from that event, and finally the socket we’re currently talking through. Give it a try, typing in a few characters. Look at your running server and you should see a stream of events that look something like this: There’s our keystrokes! Next, let’s pull out that value and use it to render HTML. Rendering Markdown Lets adjust our handle_event to pattern match out the value of the textarea: def handle_event("render_post", %{"value" => raw}, socket) do Now that we’ve got the raw markdown string, turning it into HTML is easy thanks to the work we did earlier in our Post module. Fill out the body of the function like this: {:ok, post} = Post.render(%Post{}, raw) IO.inspect(post) If you type into the textarea you should see output that looks something like this: Perfect! Lastly, it’s time to send that rendered html back to the page. Returning HTML to the page In a LiveView template, we can identify bits of dynamic data that will change over time. When they change, LiveView will compare what has changed and send over a diff. In our case, the dynamic content is the post body. Open up show.html.leex again and modify it like so: <div class="rendered-output"> <%= @post.body %> </div> Refresh the page and see: Whoops! The @post variable will only be available after we put it into the socket’s assigns. Let’s initialize it with a blank post. Open editor_live.ex and modify our mount/3 function: def mount(_params, _session, socket) do post = %Post{} {:ok, assign(socket, post: post)} end In the future, we could retrieve this from some kind of storage, but for now, let's just create a new one each time the page refreshes. Finally, we need to update the Post struct with user input. Update our event handler like this: def handle_event("render_post", %{"value" => raw}, %{assigns: %{post: post}} = socket) do {:ok, post} = Post.render(post, raw) {:noreply, assign(socket, post: post) end Let's load up http://localhost:4000/editor and see it in action. Nope, that's not quite right! Phoenix won’t render this as HTML because it’s unsafe user input. We can get around this (very good and useful) security feature by wrapping our content in a raw/1 call. We don’t have a database and user processes are isolated from each other by Elixir. The worst thing a malicious user could do would be crash their own session, which doesn’t bother me one bit. Check the edit_posts branch for the final version. Conclusion That’s a good place to stop for today. We’ve accomplished a lot! We’ve got a dynamically rendering editor that takes user input, processes it and updates the page. And we haven’t written any JavaScript, which means we don’t have to maintain or update any JavaScript. Our server code is built on the rock-solid foundation of the BEAM virtual machine, giving us a great deal of confidence in its reliability and resilience. In the next post, we’ll tackle making a shared editor, allowing multiple users to edit the same post. This project will highlight Elixir’s concurrency capabilities and demonstrate how LiveView builds on them to enable some incredible user experiences. Full Article Code Back-end Engineering
v Why's it so hard to get the cool stuff approved? By feedproxy.google.com Published On :: Thu, 27 Feb 2020 00:00:00 -0500 The classic adage is “good design speaks for itself.” Which would mean that if something’s as good of an idea as you think it is, a client will instantly see that it’s good too, right? Here at Viget, we’re always working with new and different clients. Each with their own challenges and sensibilities. But after ten years of client work, I can’t help but notice a pattern emerge when we’re trying to get approval on especially cool, unconventional parts of a design. So let’s break down some of those patterns to hopefully better understand why clients hesitate, and what strategies we’ve been using lately to help get the work we’re excited about approved.Imagine this: the parallax homepage with elements that move around in surprising ways or a unique navigation menu that conceptually reinforces a site’s message. The way the content cards on a page will, like, be literal cards that will shuffle and move around. Basically, any design that feels like an exciting, novel challenge, will need the client to “get it.” And that often turns out to be the biggest challenge of all. There are plenty of practical reasons cool designs get shot down. A client is usually more than one stakeholder, and more than the team of people you’re working with directly. On any project, there’s an amount of telephone you end up playing. Or, there’s always the classic foes: budgets and deadlines. Any idea should fit in those predetermined constraints. But as a project goes along, budgets and deadlines find a way to get tighter than you planned. But innovative designs and interactions can seem especially scary for clients to approve. There’s three fears that often pop up on projects:The fear of change. Maybe the client expected something simple, a light refresh. Something that doesn’t challenge their design expectations or require more time and effort to understand. And on our side, maybe we didn’t sufficiently ease them into our way of thinking and open them up to why we think something bigger and bolder is the right solution for them. Baby steps, y’all. The fear of the unknown. Or, less dramatically, a lack of understanding of the medium. In the past, we have struggled with how to present an interactive, animated design to a client before it’s actually built. Looking at a site that does something conceptually similar as an example can be tough. It’s asking a lot of a client’s imagination to show them a site about boots that has a cool spinning animation and get meaningful feedback about how a spinning animation would work on their site about after-school tutoring. Or maybe we’ve created static designs, then talked around what we envision happening. Again, what seems so clear in our minds as professionals entrenched in this stuff every day can be tough for someone outside the tech world to clearly understand. The fear of losing control. We’re all about learning from past mistakes. So lets say, after dealing with that fear of the unknown on a project, next time you go in the opposite direction. You invest time up front creating something polished. Maybe you even get the developer to build a prototype that moves and looks like the real thing. You’ve taken all the vague mystery out of the process, so a client will be thrilled, right? Surprise, probably not! Most clients are working with you because they want to conquer the noble quest that is their redesign together. When we jump straight to showing something that looks polished, even if it’s not really, it can feel like we jumped ahead without keeping them involved. Like we took away their input. They can also feel demotivated to give good, meaningful feedback on a polished prototype because it looks “done.”So what to do? Lately we have found low-fidelity prototypes to be a great tool for combating these fears and better communicating our ideas. What are low-fidelity prototypes?Low fidelity prototypes are a tool that designers can create quickly to illustrate an idea, without sinking time into making it pixel-perfect. Some recent examples of prototypes we've created include a clickable Figma or Invision prototype put together with Whimsical wireframes: A rough animation created in Principle illustrating less programatic animation: And even creating an animated storyboard in Photoshop: They’re rough enough that there’s no way they could be confused for a final product. But customized so that a client can immediately understand what they’re looking at and what they need to respond to. Low-fidelity prototypes hit a sweet spot that addresses those client fears head on. That fear of change? A lo-fi prototype starts rough and small, so it can ease a client into a dramatic change without overwhelming them. It’s just a first step. It gives them time to react and warm up to something that’ll ultimately be a big change.It also cuts out the fear of the unknown. Seeing something moving around, even if it’s rough, can be so much more clear than talking ourselves in circles about how we think it will move, and hoping the client can imagine it. The feature is no longer an enigma cloaked in mystery and big talk, but something tangible they can point at and ask concrete questions about.And finally, a lo-fi prototype doesn’t threaten a client’s sense of control. Low-fidelity means it’s clearly still a work in progress! It’s just an early step in the creative process, and therefore communicates that we’re still in the middle of that process together. There’s still plenty of room for their ideas and feedback. Lo-fi prototypes: client-tested, internal team-approvedThere are a lot of reasons to love lo-fi prototypes internally, too! They’re quick and easy. We can whip up multiple ideas within a few hours, without sinking the time into getting our hearts set on any one thing. In an agency setting especially, time is limited, so the faster we can get an idea out of our own heads, the better.They’re great to share with developers. Ideally, the whole team is working together simultaneously, collaborating every step of the way. Realistically, a developer often doesn’t have time during a project’s early design phase. Lo-fi prototypes are concrete enough that a developer can quickly tell if building an idea will be within scope. It helps us catch impractical ideas early and helps us all collaborate to create something that’s both cool and feasible. Stay tuned for posts in the near future diving into some of our favorite processes for creating lo-fi prototypes! Full Article Design & Content
v 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