ed 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
ed 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
ed 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
ed 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
ed 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
ed 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
ed Getting Started With Nuxt By feedproxy.google.com Published On :: Mon, 27 Apr 2020 10:30:00 +0000 Web developers build a lot of Single Page Applications using JavaScript frameworks (Angular, React, Vue). SPAs dynamically populate the contents of their pages on load which means by the time google crawls their site, the important content is yet to be injected into the site. Part of this problem can be solved by pre-rendering your application’s content. This is where server-side applications come in, and for Vuejs developers, we can build server-side applications using Nuxt. Full Article
ed 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
ed 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
ed Brighten Up Someone’s May (2020 Wallpapers Edition) By feedproxy.google.com Published On :: Thu, 30 Apr 2020 07:20:00 +0000 May is here! And even though the current situation makes this a different kind of May, with a new routine and different things on our minds as in the years before, luckily some things never change. Like the fact that we start into the new month with some fresh inspiration. Since more than nine years already, we challenge you, the design community, to get creative and produce wallpaper designs for our monthly posts. Full Article
ed Reducing Design Risk By feedproxy.google.com Published On :: Thu, 07 May 2020 10:30:00 +0000 Lean, agile, do more with less. Again, and again, design culture urges us to move quickly and trim research and design operations to the point where design becomes a mere thread in the larger corporate spool. Author and designer Nikki Anderson explains the consequences of this pressure to conduct research at lightning speed: “When we’re asked to synthesize at the speed of light, user research becomes a way for teams to take a shortcut — to invent assumptions based on quickly made correlations, opinions, and quotes. Full Article
ed Aputure announces new LS-60D daylight and LX-60X bicolour LED lights By feedproxy.google.com Published On :: Thu, 07 May 2020 19:57:32 +0000 Aputure’s been coming pretty thick and fast on the announcements lately, and now they’ve announced their new Light Storm 60D daylight and 60X bi-colour adjustable focusing LED lights. As the name suggests, these are 60 Watt LEDs, and everything is built inside the head, meaning there’s no external control unit to have to deal with. […] The post Aputure announces new LS-60D daylight and LX-60X bicolour LED lights appeared first on DIY Photography. Full Article news Aputure Gear Announcement Light Storm LS 60D LS 60X
ed Nikon has confirmed that their flagship D6 DSLR will start shipping on May 21st By feedproxy.google.com Published On :: Fri, 08 May 2020 11:06:35 +0000 It feels like forever since Nikon announced their newest flagship DSLR; the Nikon D6. It’s actually only been three months, but that hasn’t stopped some people getting anxious. Recently, customers were being told that the D6 would start shipping right about now, but now Nikon has officially come out to announce that the Nikon D6 […] The post Nikon has confirmed that their flagship D6 DSLR will start shipping on May 21st appeared first on DIY Photography. Full Article news Availability Nikon D6
ed Watch YouTube’s most informed sock puppet teach you how to shoot with manual exposure By feedproxy.google.com Published On :: Fri, 08 May 2020 17:29:41 +0000 For those who’ve never seen TheCrafsMan SteadyCraftin on YouTube, you’re in for a treat – even if you already understand everything contained within this 25-minute video. For those who have, you know exactly what to expect. I’ve been following this rather unconventional channel for a while now. It covers a lot of handy DIY and […] The post Watch YouTube’s most informed sock puppet teach you how to shoot with manual exposure appeared first on DIY Photography. Full Article Tutorials exposure Exposure Triangle photography basics SteadyCraftin TheCraftsMan
ed Godox’s new SL150/SL200 Mark II LED lights offer fanless “silent mode” operation By feedproxy.google.com Published On :: Sat, 09 May 2020 11:14:24 +0000 The Godox SL series LED lights have proven to be extremely popular due to their low cost. Two of the models in that range, the SL150 and SL200 have seen a Mark II update today, according to an email that Godox has been sending out today. One of the features of the new SL150II and […] The post Godox’s new SL150/SL200 Mark II LED lights offer fanless “silent mode” operation appeared first on DIY Photography. Full Article news Gear Announcement godox LED lights SL150II SL200II
ed Les pieds dans l’eau By feedproxy.google.com Published On :: Thu, 16 Apr 2020 22:56:57 +0000 St-Donat, Bas-St-Laurent, Québec Full Article Paysage Printemps St-Donat eau mais village
ed Goals Scored Picks *** Sunday *** 17 September 2017 By dataviz.tumblr.com Published On :: Sat, 16 Sep 2017 19:14:54 -0400 We have a new preview on https://www.007soccerpicks.com/sunday-matches/goals-scored-picks-sunday-17-september-2017/Goals Scored Picks *** Sunday *** 17 September 2017 MATCH GOALS PICKS To return: ??? USD Odds: 6.44 Stake: 100 USD Starting in Teams Our Prediction Odds Amiens - Marseille Soccer: France - Ligue 1 UNDER 2.5 1.85 AC Milan - Udinese Soccer: Italy - Serie A… Full Article over 2.5 goals tips under 2.5 goals tips MATCH GOALS Sunday Matches
ed Goals Scored Picks *** Monday *** 18 September 2017 By dataviz.tumblr.com Published On :: Sun, 17 Sep 2017 19:06:27 -0400 We have a new preview on https://www.007soccerpicks.com/monday-matches/goals-scored-picks-monday-18-september-2017/Goals Scored Picks *** Monday *** 18 September 2017 MATCH GOALS PICKS To return: ??? USD Odds: 4.56 Stake: 100 USD Starting in Teams Our Prediction Odds Astra - FC Viitorul Soccer: Romania - Liga 1 UNDER 2.5 1.60 Espanyol - Celta Vigo Soccer: Spain - LaLiga… Full Article over 2.5 goals tips under 2.5 goals tips MATCH GOALS Monday Matches
ed Goals Scored Picks *** Tuesday *** 19 September 2017 By dataviz.tumblr.com Published On :: Mon, 18 Sep 2017 16:05:01 -0400 We have a new preview on https://www.007soccerpicks.com/tuesday-matches/goals-scored-picks-tuesday-19-september-2017/Goals Scored Picks *** Tuesday *** 19 September 2017 MATCH GOALS PICKS To return: ??? USD Odds: 6.27 Stake: 100 USD Starting in Teams Our Prediction Odds Burnley - Leeds Soccer: England - Carabao Cup OVER 2.5 2.00 Schalke - Bayern Munich Soccer: Germany -… Full Article over 2.5 goals tips under 2.5 goals predictions MATCH GOALS Tuesday Matches
ed Non-associative Frobenius algebras for simply laced Chevalley groups. (arXiv:2005.02625v1 [math.RA] CROSS LISTED) By arxiv.org Published On :: We provide an explicit construction for a class of commutative, non-associative algebras for each of the simple Chevalley groups of simply laced type. Moreover, we equip these algebras with an associating bilinear form, which turns them into Frobenius algebras. This class includes a 3876-dimensional algebra on which the Chevalley group of type E8 acts by automorphisms. We also prove that these algebras admit the structure of (axial) decomposition algebras. Full Article
ed The entropy of holomorphic correspondences: exact computations and rational semigroups. (arXiv:2004.13691v1 [math.DS] CROSS LISTED) By arxiv.org Published On :: We study two notions of topological entropy of correspondences introduced by Friedland and Dinh-Sibony. Upper bounds are known for both. We identify a class of holomorphic correspondences whose entropy in the sense of Dinh-Sibony equals the known upper bound. This provides an exact computation of the entropy for rational semigroups. We also explore a connection between these two notions of entropy. Full Article
ed Regular Tur'an numbers of complete bipartite graphs. (arXiv:2005.02907v2 [math.CO] UPDATED) By arxiv.org Published On :: Let $mathrm{rex}(n, F)$ denote the maximum number of edges in an $n$-vertex graph that is regular and does not contain $F$ as a subgraph. We give lower bounds on $mathrm{rex}(n, F)$, that are best possible up to a constant factor, when $F$ is one of $C_4$, $K_{2,t}$, $K_{3,3}$ or $K_{s,t}$ when $t>s!$. Full Article
ed A Marstrand type slicing theorem for subsets of $mathbb{Z}^2 subset mathbb{R}^2$ with the mass dimension. (arXiv:2005.02813v2 [math.CO] UPDATED) By arxiv.org Published On :: We prove a Marstrand type slicing theorem for the subsets of the integer square lattice. This problem is the dual of the corresponding projection theorem, which was considered by Glasscock, and Lima and Moreira, with the mass and counting dimensions applied to subsets of $mathbb{Z}^{d}$. In this paper, more generally we deal with a subset of the plane that is $1$ separated, and the result for subsets of the integer lattice follow as a special case. We show that the natural slicing question in this setting is true with the mass dimension. Full Article
ed On the affine Hecke category. (arXiv:2005.02647v2 [math.RT] UPDATED) By arxiv.org Published On :: We give a complete (and surprisingly simple) description of the affine Hecke category for $ ilde{A}_2$ in characteristic zero. More precisely, we calculate the Kazhdan-Lusztig polynomials, give a recursive formula for the projectors defining indecomposable objects and, for each coefficient of a Kazhdan-Lusztig polynomial, we produce a set of morphisms with such a cardinality. Full Article
ed On the finiteness of ample models. (arXiv:2005.02613v2 [math.AG] UPDATED) By arxiv.org Published On :: In this paper, we generalize the finiteness of models theorem in [BCHM06] to Kawamata log terminal pairs with fixed Kodaira dimension. As a consequence, we prove that a Kawamata log terminal pair with $mathbb{R}-$boundary has a canonical model, and can be approximated by log pairs with $mathbb{Q}-$boundary and the same canonical model. Full Article
ed Arthur packets for $G_2$ and perverse sheaves on cubics. (arXiv:2005.02438v2 [math.RT] UPDATED) By arxiv.org Published On :: This paper begins the project of defining Arthur packets of all unipotent representations for the $p$-adic exceptional group $G_2$. Here we treat the most interesting case by defining and computing Arthur packets with component group $S_3$. We also show that the distributions attached to these packets are stable, subject to a hypothesis. This is done using a self-contained microlocal analysis of simple equivariant perverse sheaves on the moduli space of homogeneous cubics in two variables. In forthcoming work we will treat the remaining unipotent representations and their endoscopic classification and strengthen our result on stability. Full Article
ed Solutions for nonlinear Fokker-Planck equations with measures as initial data and McKean-Vlasov equations. (arXiv:2005.02311v2 [math.AP] UPDATED) By arxiv.org Published On :: One proves the existence and uniqueness of a generalized (mild) solution for the nonlinear Fokker--Planck equation (FPE) egin{align*} &u_t-Delta (eta(u))+{mathrm{ div}}(D(x)b(u)u)=0, quad tgeq0, xinmathbb{R}^d, d e2, \ &u(0,cdot)=u_0,mbox{in }mathbb{R}^d, end{align*} where $u_0in L^1(mathbb{R}^d)$, $etain C^2(mathbb{R})$ is a nondecreasing function, $bin C^1$, bounded, $bgeq 0$, $Din(L^2cap L^infty)(mathbb{R}^d;mathbb{R}^d)$ with ${ m div}, Din L^infty(mathbb{R}^d)$, and ${ m div},Dgeq0$, $eta$ strictly increasing, if $b$ is not constant. Moreover, $t o u(t,u_0)$ is a semigroup of contractions in $L^1(mathbb{R}^d)$, which leaves invariant the set of probability density functions in $mathbb{R}^d$. If ${ m div},Dgeq0$, $eta'(r)geq a|r|^{alpha-1}$, and $|eta(r)|leq C r^alpha$, $alphageq1,$ $alpha>frac{d-2}d$, $dgeq3$, then $|u(t)|_{L^infty}le Ct^{-frac d{d+(alpha-1)d}} |u_0|^{frac2{2+(m-1)d}},$ $t>0$, and the existence extends to initial data $u_0$ in the space $mathcal{M}_b$ of bounded measures in $mathbb{R}^d$. The solution map $mumapsto S(t)mu$, $tgeq0$, is a Lipschitz contractions on $mathcal{M}_b$ and weakly continuous in $tin[0,infty)$. As a consequence for arbitrary initial laws, we obtain weak solutions to a class of McKean-Vlasov SDEs with coefficients which have singular dependence on the time marginal laws. Full Article
ed Almost invariant subspaces of the shift operator on vector-valued Hardy spaces. (arXiv:2005.02243v2 [math.FA] UPDATED) By arxiv.org Published On :: In this article, we characterize nearly invariant subspaces of finite defect for the backward shift operator acting on the vector-valued Hardy space which is a vectorial generalization of a result of Chalendar-Gallardo-Partington (C-G-P). Using this characterization of nearly invariant subspace under the backward shift we completely describe the almost invariant subspaces for the shift and its adjoint acting on the vector valued Hardy space. Full Article
ed Cameron-Liebler sets in Hamming graphs. (arXiv:2005.02227v2 [math.CO] UPDATED) By arxiv.org Published On :: In this paper, we discuss Cameron-Liebler sets in Hamming graphs, obtain several equivalent definitions and present all classification results. Full Article
ed Some Quot schemes in tilted hearts and moduli spaces of stable pairs. (arXiv:2005.02202v2 [math.AG] UPDATED) By arxiv.org Published On :: For a smooth projective variety $X$, we study analogs of Quot functors in hearts of non-standard $t$-structures of $D^b(mathrm{Coh}(X))$. The technical framework is that of families of $t$-structures, as studied in arXiv:1902.08184. We provide several examples and suggest possible directions of further investigation, as we reinterpret moduli spaces of stable pairs, in the sense of Thaddeus (arXiv:alg-geom/9210007) and Huybrechts-Lehn (arXiv:alg-geom/9211001), as instances of Quot schemes. Full Article
ed Nonlinear singular problems with indefinite potential term. (arXiv:2005.01789v3 [math.AP] UPDATED) By arxiv.org Published On :: We consider a nonlinear Dirichlet problem driven by a nonhomogeneous differential operator plus an indefinite potential. In the reaction we have the competing effects of a singular term and of concave and convex nonlinearities. In this paper the concave term is parametric. We prove a bifurcation-type theorem describing the changes in the set of positive solutions as the positive parameter $lambda$ varies. This work continues our research published in arXiv:2004.12583, where $xi equiv 0 $ and in the reaction the parametric term is the singular one. Full Article
ed Entropy and Emergence of Topological Dynamical Systems. (arXiv:2005.01548v2 [math.DS] UPDATED) By arxiv.org Published On :: A topological dynamical system $(X,f)$ induces two natural systems, one is on the probability measure spaces and other one is on the hyperspace. We introduce a concept for these two spaces, which is called entropy order, and prove that it coincides with topological entropy of $(X,f)$. We also consider the entropy order of an invariant measure and a variational principle is established. Full Article
ed Resonances as Viscosity Limits for Exponentially Decaying Potentials. (arXiv:2005.01257v2 [math.SP] UPDATED) By arxiv.org Published On :: We show that the complex absorbing potential (CAP) method for computing scattering resonances applies to the case of exponentially decaying potentials. That means that the eigenvalues of $-Delta + V - iepsilon x^2$, $|V(x)|leq e^{-2gamma |x|}$ converge, as $ epsilon o 0+ $, to the poles of the meromorphic continuation of $ ( -Delta + V -lambda^2 )^{-1} $ uniformly on compact subsets of $ extrm{Re},lambda>0$, $ extrm{Im},lambda>-gamma$, $arglambda > pi/8$. Full Article
ed Approximate Two-Sphere One-Cylinder Inequality in Parabolic Periodic Homogenization. (arXiv:2005.00989v2 [math.AP] UPDATED) By arxiv.org Published On :: In this paper, for a family of second-order parabolic equation with rapidly oscillating and time-dependent periodic coefficients, we are interested in an approximate two-sphere one-cylinder inequality for these solutions in parabolic periodic homogenization, which implies an approximate quantitative propagation of smallness. The proof relies on the asymptotic behavior of fundamental solutions and the Lagrange interpolation technique. Full Article
ed Solving an inverse problem for the Sturm-Liouville operator with a singular potential by Yurko's method. (arXiv:2004.14721v2 [math.SP] UPDATED) By arxiv.org Published On :: An inverse spectral problem for the Sturm-Liouville operator with a singular potential from the class $W_2^{-1}$ is solved by the method of spectral mappings. We prove the uniqueness theorem, develop a constructive algorithm for solution, and obtain necessary and sufficient conditions of solvability for the inverse problem in the self-adjoint and the non-self-adjoint cases Full Article
ed An embedding of the Morse boundary in the Martin boundary. (arXiv:2004.14624v2 [math.GR] UPDATED) By arxiv.org Published On :: We construct a one-to-one continuous map from the Morse boundary of a hierarchically hyperbolic group to its Martin boundary. This construction is based on deviation inequalities generalizing Ancona's work on hyperbolic groups. This provides a possibly new metrizable topology on the Morse boundary of such groups. We also prove that the Morse boundary has measure 0 with respect to the harmonic measure unless the group is hyperbolic. Full Article
ed Complete reducibility: Variations on a theme of Serre. (arXiv:2004.14604v2 [math.GR] UPDATED) By arxiv.org Published On :: In this note, we unify and extend various concepts in the area of $G$-complete reducibility, where $G$ is a reductive algebraic group. By results of Serre and Bate--Martin--R"{o}hrle, the usual notion of $G$-complete reducibility can be re-framed as a property of an action of a group on the spherical building of the identity component of $G$. We show that other variations of this notion, such as relative complete reducibility and $sigma$-complete reducibility, can also be viewed as special cases of this building-theoretic definition, and hence a number of results from these areas are special cases of more general properties. Full Article
ed Lagrangian geometry of matroids. (arXiv:2004.13116v2 [math.CO] UPDATED) By arxiv.org Published On :: We introduce the conormal fan of a matroid M, which is a Lagrangian analog of the Bergman fan of M. We use the conormal fan to give a Lagrangian interpretation of the Chern-Schwartz-MacPherson cycle of M. This allows us to express the h-vector of the broken circuit complex of M in terms of the intersection theory of the conormal fan of M. We also develop general tools for tropical Hodge theory to prove that the conormal fan satisfies Poincar'e duality, the hard Lefschetz theorem, and the Hodge-Riemann relations. The Lagrangian interpretation of the Chern-Schwartz-MacPherson cycle of M, when combined with the Hodge-Riemann relations for the conormal fan of M, implies Brylawski's and Dawson's conjectures that the h-vectors of the broken circuit complex and the independence complex of M are log-concave sequences. Full Article
ed On the exterior Dirichlet problem for a class of fully nonlinear elliptic equations. (arXiv:2004.12660v3 [math.AP] UPDATED) By arxiv.org Published On :: In this paper, we mainly establish the existence and uniqueness theorem for solutions of the exterior Dirichlet problem for a class of fully nonlinear second-order elliptic equations related to the eigenvalues of the Hessian, with prescribed generalized symmetric asymptotic behavior at infinity. Moreover, we give some new results for the Hessian equations, Hessian quotient equations and the special Lagrangian equations, which have been studied previously. Full Article
ed Differentiating through Log-Log Convex Programs. (arXiv:2004.12553v2 [math.OC] UPDATED) By arxiv.org Published On :: We show how to efficiently compute the derivative (when it exists) of the solution map of log-log convex programs (LLCPs). These are nonconvex, nonsmooth optimization problems with positive variables that become convex when the variables, objective functions, and constraint functions are replaced with their logs. We focus specifically on LLCPs generated by disciplined geometric programming, a grammar consisting of a set of atomic functions with known log-log curvature and a composition rule for combining them. We represent a parametrized LLCP as the composition of a smooth transformation of parameters, a convex optimization problem, and an exponential transformation of the convex optimization problem's solution. The derivative of this composition can be computed efficiently, using recently developed methods for differentiating through convex optimization problems. We implement our method in CVXPY, a Python-embedded modeling language and rewriting system for convex optimization. In just a few lines of code, a user can specify a parametrized LLCP, solve it, and evaluate the derivative or its adjoint at a vector. This makes it possible to conduct sensitivity analyses of solutions, given perturbations to the parameters, and to compute the gradient of a function of the solution with respect to the parameters. We use the adjoint of the derivative to implement differentiable log-log convex optimization layers in PyTorch and TensorFlow. Finally, we present applications to designing queuing systems and fitting structured prediction models. Full Article
ed Triangles in graphs without bipartite suspensions. (arXiv:2004.11930v2 [math.CO] UPDATED) By arxiv.org Published On :: Given graphs $T$ and $H$, the generalized Tur'an number ex$(n,T,H)$ is the maximum number of copies of $T$ in an $n$-vertex graph with no copies of $H$. Alon and Shikhelman, using a result of ErdH os, determined the asymptotics of ex$(n,K_3,H)$ when the chromatic number of $H$ is greater than 3 and proved several results when $H$ is bipartite. We consider this problem when $H$ has chromatic number 3. Even this special case for the following relatively simple 3-chromatic graphs appears to be challenging. The suspension $widehat H$ of a graph $H$ is the graph obtained from $H$ by adding a new vertex adjacent to all vertices of $H$. We give new upper and lower bounds on ex$(n,K_3,widehat{H})$ when $H$ is a path, even cycle, or complete bipartite graph. One of the main tools we use is the triangle removal lemma, but it is unclear if much stronger statements can be proved without using the removal lemma. Full Article
ed Convergent normal forms for five dimensional totally nondegenerate CR manifolds in C^4. (arXiv:2004.11251v2 [math.CV] UPDATED) By arxiv.org Published On :: Applying the equivariant moving frames method, we construct convergent normal forms for real-analytic 5-dimensional totally nondegenerate CR submanifolds of C^4. These CR manifolds are divided into several biholomorphically inequivalent subclasses, each of which has its own complete normal form. Moreover it is shown that, biholomorphically, Beloshapka's cubic model is the unique member of this class with the maximum possible dimension seven of the corresponding algebra of infinitesimal CR automorphisms. Our results are also useful in the study of biholomorphic equivalence problem between CR manifolds, in question. Full Article
ed Finite dimensional simple modules of $(q, mathbf{Q})$-current algebras. (arXiv:2004.11069v2 [math.RT] UPDATED) By arxiv.org Published On :: The $(q, mathbf{Q})$-current algebra associated with the general linear Lie algebra was introduced by the second author in the study of representation theory of cyclotomic $q$-Schur algebras. In this paper, we study the $(q, mathbf{Q})$-current algebra $U_q(mathfrak{sl}_n^{langle mathbf{Q} angle}[x])$ associated with the special linear Lie algebra $mathfrak{sl}_n$. In particular, we classify finite dimensional simple $U_q(mathfrak{sl}_n^{langle mathbf{Q} angle}[x])$-modules. Full Article
ed Automorphisms of shift spaces and the Higman--Thomspon groups: the one-sided case. (arXiv:2004.08478v2 [math.GR] UPDATED) By arxiv.org Published On :: Let $1 le r < n$ be integers. We give a proof that the group $mathop{mathrm{Aut}}({X_{n}^{mathbb{N}}, sigma_{n}})$ of automorphisms of the one-sided shift on $n$ letters embeds naturally as a subgroup $mathcal{h}_{n}$ of the outer automorphism group $mathop{mathrm{Out}}(G_{n,r})$ of the Higman-Thompson group $G_{n,r}$. From this, we can represent the elements of $mathop{mathrm{Aut}}({X_{n}^{mathbb{N}}, sigma_{n}})$ by finite state non-initial transducers admitting a very strong synchronizing condition. Let $H in mathcal{H}_{n}$ and write $|H|$ for the number of states of the minimal transducer representing $H$. We show that $H$ can be written as a product of at most $|H|$ torsion elements. This result strengthens a similar result of Boyle, Franks and Kitchens, where the decomposition involves more complex torsion elements and also does not support practical extit{a priori} estimates of the length of the resulting product. We also give new proofs of some known results about $mathop{mathrm{Aut}}({X_{n}^{mathbb{N}}, sigma_{n}})$. Full Article
ed Equivalence of classical and quantum completeness for real principal type operators on the circle. (arXiv:2004.07547v3 [math.AP] UPDATED) By arxiv.org Published On :: In this article, we prove that the completeness of the Hamilton flow and essential self-dajointness are equivalent for real principal type operators on the circle. Moreover, we study spectral properties of these operators. Full Article
ed Hessian quotient equations on exterior domains. (arXiv:2004.06908v2 [math.AP] UPDATED) By arxiv.org Published On :: It is well-known that a celebrated J"{o}rgens-Calabi-Pogorelov theorem for Monge-Amp`ere equations states that any classical (viscosity) convex solution of $det(D^2u)=1$ in $mathbb{R}^n$ must be a quadratic polynomial. Therefore, it is an interesting topic to study the existence and uniqueness theorem of such fully nonlinear partial differential equations' Dirichlet problems on exterior domains with suitable asymptotic conditions at infinity. As a continuation of the works of Caffarelli-Li for Monge-Amp`ere equation and of Bao-Li-Li for $k$-Hessian equations, this paper is devoted to the solvability of the exterior Dirichlet problem of Hessian quotient equations $sigma_k(lambda(D^2u))/sigma_l(lambda(D^2u))=1$ for any $1leq l<kleq n$ in all dimensions $ngeq 2$. By introducing the concept of generalized symmetric subsolutions and then using the Perron's method, we establish the existence theorem for viscosity solutions, with prescribed asymptotic behavior which is close to some quadratic polynomial at infinity. Full Article
ed On the Asymptotic $u_0$-Expected Flooding Time of Stationary Edge-Markovian Graphs. (arXiv:2004.03660v4 [math.PR] UPDATED) By arxiv.org Published On :: Consider that $u_0$ nodes are aware of some piece of data $d_0$. This note derives the expected time required for the data $d_0$ to be disseminated through-out a network of $n$ nodes, when communication between nodes evolves according to a graphical Markov model $overline{ mathcal{G}}_{n,hat{p}}$ with probability parameter $hat{p}$. In this model, an edge between two nodes exists at discrete time $k in mathbb{N}^+$ with probability $hat{p}$ if this edge existed at $k-1$, and with probability $(1-hat{p})$ if this edge did not exist at $k-1$. Each edge is interpreted as a bidirectional communication link over which data between neighbors is shared. The initial communication graph is assumed to be an Erdos-Renyi random graph with parameters $(n,hat{p})$, hence we consider a emph{stationary} Markov model $overline{mathcal{G}}_{n,hat{p}}$. The asymptotic "$u_0$-expected flooding time" of $overline{mathcal{G}}_{n,hat{p}}$ is defined as the expected number of iterations required to transmit the data $d_0$ from $u_0$ nodes to $n$ nodes, in the limit as $n$ approaches infinity. Although most previous results on the asymptotic flooding time in graphical Markov models are either emph{almost sure} or emph{with high probability}, the bounds obtained here are emph{in expectation}. However, our bounds are tighter and can be more complete than previous results. Full Article
ed $L^p$-regularity of the Bergman projection on quotient domains. (arXiv:2004.02598v2 [math.CV] UPDATED) By arxiv.org Published On :: We relate the $L^p$-mapping properties of the Bergman projections on two domains in $mathbb{C}^n$, one of which is the quotient of the other under the action of a finite group of biholomorphic automorphisms. We use this relation to deduce the sharp ranges of $L^p$-boundedness of the Bergman projection on certain $n$-dimensional model domains generalizing the Hartogs triangle. Full Article
ed Output feedback stochastic MPC with packet losses. (arXiv:2004.02591v2 [math.OC] UPDATED) By arxiv.org Published On :: The paper considers constrained linear systems with stochastic additive disturbances and noisy measurements transmitted over a lossy communication channel. We propose a model predictive control (MPC) law that minimizes a discounted cost subject to a discounted expectation constraint. Sensor data is assumed to be lost with known probability, and data losses are accounted for by expressing the predicted control policy as an affine function of future observations, which results in a convex optimal control problem. An online constraint-tightening technique ensures recursive feasibility of the online optimization and satisfaction of the expectation constraint without bounds on the distributions of the noise and disturbance inputs. The cost evaluated along trajectories of the closed loop system is shown to be bounded by the optimal predicted cost. A numerical example is given to illustrate these results. Full Article
ed Set-Theoretical Problems in Asymptology. (arXiv:2004.01979v3 [math.GN] UPDATED) By arxiv.org Published On :: In this paper we collect some open set-theoretic problems that appear in the large-scale topology (called also Asymptology). In particular we ask problems about critical cardinalities of some special (large, indiscrete, inseparated) coarse structures on $omega$, about the interplay between properties of a coarse space and its Higson corona, about some special ultrafilters ($T$-points and cellular $T$-points) related to finitary coarse structures on $omega$, about partitions of coarse spaces into thin pieces, and also about coarse groups having some extremal properties. Full Article