comes New recommendations for stroke systems of care to improve patient outcomes By newsroom.heart.org Published On :: Mon, 20 May 2019 09:00:00 GMT Statement Highlights: To translate advances in scientific knowledge and innovations in stroke care into improvements in patient outcomes, comprehensive stroke systems of care must be in place to facilitate optimal stroke care delivery. New recommendations support policies that standardize the delivery of stroke care, lower barriers to emergency care for stroke, ensure stroke patients receive care at appropriate hospitals in a timely manner and improve access to secondary prevention and rehabilitation and recovery resources after stroke. Full Article
comes Two new AHA statements focus on heart failure: How social determinants can affect outcomes; impact on caregivers By newsroom.heart.org Published On :: Thu, 30 Apr 2020 09:00:00 GMT Statements Highlights: Adverse social factors, such as insurance status, food insecurity, lack of funds for medication and others, may lead to worse heart failure outcomes. Caregiving by family and friends of people with heart failure is increasingly... Full Article
comes New COVID-19 patient data registry will provide insights to care and adverse cardiovascular outcomes By newsroom.heart.org Published On :: Fri, 03 Apr 2020 14:50:00 GMT DALLAS, April 3, 2020 —As physicians, scientists and researchers worldwide struggle to understand the coronavirus (COVID-19) pandemic, the American Heart Association is developing a novel registry to aggregate data and aid research on the disease,... Full Article
comes 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
comes 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
comes 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
comes Here comes Traversty traversing the DOM By feedproxy.google.com Published On :: Fri, 02 Nov 2012 01:59:37 +0000 The Traversty DOM utility has as its purpose to allow you to traverse the DOM and manage collections of DOM elements. Proponents admit core Traversty traversal methods are inspired by Prototype’s DOM Traversal toolkit, but now in a multi-element environment that is more like jQuery and less like Prototype’s single element implementation. Full Article Front Page JavaScript
comes 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
comes Apparatus for making frozen comestibles By www.freepatentsonline.com Published On :: Tue, 24 Feb 2015 08:00:00 EST An apparatus for making frozen comestibles including a base having a plurality of apertures formed within said first site thereof, and a plurality of molds attached to or formed integrally with the base. Each of the molds includes a receiving surface and an opening aligned with a corresponding one of the apertures of the base. Each of the molds is moveable between a first position, in which a substantial portion of at least one mold is positioned within the interior portion of the base and said receiving surface forms a molding cavity that is adapted to receive a comestible to be frozen, and a second position, in which a substantial portion of the mold extends outwardly from the first side of the base and the receiving surface of the mold is exposed externally. Full Article
comes Southampton academic welcomes healthier new food labelling By www.dailyecho.co.uk Published On :: Thu, 20 Jun 2013 11:20:00 +0100 A NEW drive to urge people to stack their shopping trollies with healthier foods could help tackle Southampton’s shocking premature death rates, an academic has said. Full Article
comes Guide and Scout show becomes online hit with first cancellation in 63 years By www.dailyecho.co.uk Published On :: Thu, 23 Apr 2020 05:07:20 +0100 A CELEBRATED Guide and Scout show which was cancelled for the first time in 63 years was turned into an uplifting online video instead. Full Article
comes Food wholesaler Harvest Fine Foods becomes home delivery service in lockdown By www.dailyecho.co.uk Published On :: Fri, 01 May 2020 15:43:24 +0100 ONE of the largest independent food wholesalers in the south has rapidly turned itself into a home delivery service along the same lines as the supermarkets. Full Article
comes Quick Tip: What to do if an app on your Mac becomes unresponsive By www.applevis.com Published On :: Wed, 18 Mar 2020 19:16:56 -0300 In this podcast, Tyler Stephen demonstrates what to do if an app on your Mac becomes unresponsive. Full Article macOS New Users Quick Tips Walk-through
comes Adam Lambert Comes Clean About Christina Aguilera Tour Plan Hampered by Coronavirus By www.aceshowbiz.com Published On :: Mon, 04 May 2020 09:00:01 +0000 The 'American Idol' alum serving as Queen frontman admits in a social media post that he and the 'Genie in a Bottle' hitmaker had tried to put together Summer tour before the COVID-19 lockdown. Full Article music Adam Lambert Christina Aguilera
comes The Ramblers Ball welcomes famous faces for 2020 return By thebirminghampress.com Published On :: Tue, 18 Feb 2020 16:47:49 +0000 Spoken word extravaganza to promote social enterprise once more. Full Article Charities Community Poetry Casey Bailey Evolve Ollie O’Neill Saili Katebe The Ramblers Ball
comes Beauty training group comes to Birmingham By thebirminghampress.com Published On :: Wed, 14 Nov 2018 00:00:54 +0000 HD Brows add city centre to their list of academies. Full Article Fashion Style and Design HD Brows
comes Hollywood comes to Artrix By thebirminghampress.com Published On :: Wed, 11 Dec 2019 00:00:02 +0000 Classic films season to air at arts centre. Full Article Christmas Cinema Film Artrix Calamity Jane Guys & Dolls Singin in the Rain
comes Miss Burlesque UK comes to Birmingham By thebirminghampress.com Published On :: Sun, 20 Oct 2019 23:00:44 +0000 Crescent Theatre to host glamorous international event. Full Article Attractions Fashion Amber Topaz Crescent Theatre Melanie Piantoni Miss Burlesque UK
comes Sting dance musical comes to Birmingham By thebirminghampress.com Published On :: Fri, 07 Feb 2020 00:00:57 +0000 Local heroes to appear in acclaimed production. Full Article Dance Music Theatre Beverley Knight Kate Price Lynval Golding Message In A Bottle Sting
comes Acorns Bubble Rush comes to Birmingham By thebirminghampress.com Published On :: Wed, 03 Jul 2019 23:00:54 +0000 Sign up for the soapy spectacular that supports children and families. Full Article Charities Health Running Acorns Bubble Rush Acorns Children’s Hospice Alton Towers
comes The Ivy welcomes new spring dishes By thebirminghampress.com Published On :: Fri, 13 Mar 2020 00:00:41 +0000 City centre restaurant moving out of winter with new menu. Full Article Eating out Food and drink Ivy Temple Row
comes FirstCry becomes Ratan Tata's fourth investment in 2016 By retail.economictimes.indiatimes.com Published On :: 2016-01-21T07:53:43+05:30 Earlier this month, Ratan Tata had invested in Tracxn Technologies and followed it up with pet care portal DogSpot and online cashback and coupons venture CashKaro. Full Article
comes Access To Illinois Dentists Varies Across Locations And Incomes By www.northernpublicradio.org Published On :: Tue, 29 Jan 2019 12:00:00 +0000 For some people, going to the dentist can be a double-edged sword. On one hand, regular dental treatment keeps teeth healthy. But at the same time, the sights, sounds and smells of a dental office can be unsettling for some. But which dentists you can access, and even afford, often depends on where you live. Dionne Haney is Director of Professional Services for the Illinois State Dental Society, a professional group affiliated with the American Dental Association. Haney says membership records can provide a tally of dental specialists. "We believe there's currently about 11,000 dentists licensed in the state," she said. "Approximately 8,500 of them actually practice. But with regards to membership in ISDS, they can be practicing or retired." That may seem like a lot of dentists, but Haney says they're spread across a state that has more than 12 million residents. About two-thirds of practicing Illinois dentists are based in and around Chicago. This doesn't mean people have no access to Full Article
comes Glasgow's Secret Taxi Driver: Warm welcomes and smiles after delivering PPE By www.glasgowtimes.co.uk Published On :: Wed, 06 May 2020 05:00:00 +0100 IT’S the smiling faces which keep you going. Full Article
comes Dennos Museum says less is more when it comes to viewing art By www.interlochenpublicradio.org Published On :: Thu, 29 Mar 2018 20:58:28 +0000 The Dennos Museum in Traverse City has almost three-thousand works of art in its collection. At any given time, around 280 of those works are on display, including Inuit sculptures, contemporary paintings and modern photographs. But on April 14th, the museum wants visitors to ignore most of these works and just focus on a handful of them. Full Article
comes Of Note: When the Past Becomes Present with Composer Reiko Futing By www.kuaf.com Published On :: Thu, 18 Jul 2019 18:14:09 +0000 Composer Reiko Futing redefines contemporary composition with the incorporation of early music. In Futing's newest international portrait album "distantSong," he draws on music of the past to reflect on the art and culture of today. Futing was inspired by a professor at the Hochschule fur Musik in Dresden to incorporate early music into his own compositions. Futing says this led him to produce a subtle, yet noticeable, marriage of past and present musical languages for something completely new, yet familiar. Listen to the full interview with Of Note's Katy Henriksen with the streaming link above. Full Article
comes Buffalo Wild Wings welcomes March Madness with video, Snapchat campaign By feeds.mobilemarketer.com Published On :: March 17, 2017 Buffalo Wild Wings is looking to capture the attention of lucrative customers attached to March Madness thanks to a new video and Snapchat campaign called “We Do It For You.” Full Article
comes Staying Sober In Isolation: As Quarantine Threatens Recovery, Connection Becomes Crucial By feedproxy.google.com Published On :: Fri, 17 Apr 2020 18:53:36 +0000 Many people are finding social distancing difficult or lonely. Those challenges can become compounded for people recovering from substance abuse disorders. In fact, the coronavirus pandemic and resulting quarantine conditions have been identified as a “relapse trigger.” And it has become a dangerous reality for those who struggle with sobriety. The Georgia Council on Substance Abuse estimates that some 800,000 Georgians are in recovery from alcohol and drug addiction. Full Article
comes Episode 0x3A: FOSDEM 2013: FOSS Code Goes In And Never Comes Out By faif.us Published On :: Wed, 03 Apr 2013 16:25:00 -0400 Karen and Bradley listen to and discuss Gabriel Holloway's talk from FOSDEM 2013, entitled FOSS code goes in and never comes out: The Challenge of Sandboxed Proprietary Cloud Services. Show Notes: Segment 0 (00:00:33) Karen and Bradley introduce the talk. Segment 1 (00:05:48) The speaker's that you hear are: Gabriel Holloway, who gives the talk Till Jaeger asks the first question. A few other questions are asked, but we're unsure who the speakers are. Tom Marble, asks a question later. Unfortunately, Gabe didn't provide us with slides. Segment 2 (00:52:25) Bradley mentioned the Berne Convention on Copyright. (01:07:19) Karen mentioned Cooper Union and how they are in danger of running out of money for their full tuition scholarships. (01:10:00) Bradley looked but couldn't find the NPR story about terms of use. (01:19:37) Send feedback and comments on the cast to <oggcast@faif.us>. You can keep in touch with Free as in Freedom on our IRC channel, #faif on irc.freenode.net, and by following Conservancy on on Twitter and and FaiF on Twitter. Free as in Freedom is produced by Dan Lynch of danlynch.org. Theme music written and performed by Mike Tarantino with Charlie Paxson on drums. The content of this audcast, and the accompanying show notes and music are licensed under the Creative Commons Attribution-Share-Alike 4.0 license (CC BY-SA 4.0). Full Article Technology
comes U.N. Chief's Record Comes Under Fire By www.washingtonpost.com Published On :: Sun, 8 May 2005 19:03:50 GMT UNITED NATIONS -- In eight years as U.N. secretary general, Kofi Annan has come as close to superstardom as a diplomat can get -- lauded on the cover of Time, sharing the 2001 Nobel Peace Prize with the organization he leads and becoming known as the "secular pope" for his advocacy for peace and the poor. Full Article
comes California wide receiver Orion Peters becomes first WSU Cougars commit in 2021 class By www.seattletimes.com Published On :: Sat, 02 May 2020 10:29:37 -0700 Inglewood (Calif.) High wide receiver Orion Peters pledged to WSU, becoming the first 2021 prospect to do so when he announced his decision on Twitter Friday night. Full Article Cougar Football Cougars Sports
comes Three-star offensive tackle Christian Hilborn becomes WSU’s second 2021 commit By www.seattletimes.com Published On :: Fri, 08 May 2020 12:47:29 -0700 Christian Hilborn, a 6-foot-5, 280-pound offensive tackle from Highland High School in Utah has pledged to the Cougars, becoming WSU's second commit of the 2021 class. Full Article Cougar Football Cougars Sports
comes When it comes to academics and diversity, Gonzaga is No. 1 seed By www.seattletimes.com Published On :: Thu, 02 Apr 2020 15:41:44 -0700 Gonzaga stood out in a study that seeded men’s and women’s NCAA tournament brackets based on graduation rates, academic success and diversity in the head-coaching ranks. Full Article Cougar Basketball Gonzaga Sports
comes This has been Seattle’s driest April weather on record so far — but here comes the rain By www.seattletimes.com Published On :: Mon, 20 Apr 2020 07:02:20 -0700 It's been the driest start to April since Seattle started recording its weather, with less than one-tenth of an inch of rain so far, according to the National Weather Service. That's about to change — perhaps making it easier for sun lovers to observe the governor's stay-home order. Full Article Eastside Local News Puget Sound Weather
comes California wide receiver Orion Peters becomes first WSU Cougars commit in 2021 class By www.seattletimes.com Published On :: Sat, 02 May 2020 10:29:37 -0700 Inglewood (Calif.) High wide receiver Orion Peters pledged to WSU, becoming the first 2021 prospect to do so when he announced his decision on Twitter Friday night. Full Article Cougar Football Cougars Sports
comes Three-star offensive tackle Christian Hilborn becomes WSU’s second 2021 commit By www.seattletimes.com Published On :: Fri, 08 May 2020 12:47:29 -0700 Christian Hilborn, a 6-foot-5, 280-pound offensive tackle from Highland High School in Utah has pledged to the Cougars, becoming WSU's second commit of the 2021 class. Full Article Cougar Football Cougars Sports
comes Panic buying comes for the seeds as coronavirus quarantines prompt surge in gardening By www.seattletimes.com Published On :: Mon, 30 Mar 2020 22:07:13 -0700 Companies struggle to meet surging demand, especially for vegetables. “It feels like we are selling toilet paper,” said the founder of a seed company. Full Article Garden Life Nation Nation & World Travel Wellness
comes Feed the soul: In chaotic times, gardening becomes therapy By www.seattletimes.com Published On :: Tue, 31 Mar 2020 05:15:53 -0700 CHARLESTON, W.Va. (AP) — Dig. Plant. Breathe. As spring’s arrival in the Northern Hemisphere coincides with government stay-at-home orders, the itch to get outside has turned backyard gardens into a getaway for the mind in chaotic times. Gardeners who already know that working with soil is a way to connect with nature say it helps […] Full Article Garden Health Life Nation
comes Teeing off: Topgolf’s indoor facility comes to Kirkland. So is virtual golf worth the price? By www.seattletimes.com Published On :: Wed, 19 Feb 2020 06:00:12 -0800 When it's miserable outside, you can still hit shots inside the recently opened Lounge by Topgolf in Kirkland, where plenty of virtual golf opportunities await. Full Article Golf Sports
comes When it comes to academics and diversity, Gonzaga is No. 1 seed By www.seattletimes.com Published On :: Thu, 02 Apr 2020 15:41:44 -0700 Gonzaga stood out in a study that seeded men’s and women’s NCAA tournament brackets based on graduation rates, academic success and diversity in the head-coaching ranks. Full Article Cougar Basketball Gonzaga Sports
comes How data becomes knowledge, Part 1: From data to knowledge By www.ibm.com Published On :: 06 Mar 2018 05:00:00 +0000 Trace the path from raw data to stored knowledge. Identify various data sources and the differences between structured and unstructured data. Learn what makes data valuable before applying the DIKW model to data science. Full Article data
comes How data becomes knowledge, Part 3: Extracting dark data By www.ibm.com Published On :: 08 Mar 2018 05:00:00 +0000 Individuals and organizations store all kinds of data. What do we do with it all? Can we call it up as we need it? Can all that data be analyzed quickly and efficiently? Or, does it tie up storage resources and languish for years because the cost of going through it and discarding what's obsolete is too high? Discover the utility and wisdom of storing dark data. Full Article data
comes Edmonton survivor of random attack, 8 year old car enthusiast, Sudbury teen overcomes bullying to pursue acting and Loran prize winner By www.cbc.ca Published On :: Thu, 27 Feb 2020 00:00:00 EST Edmonton father and son describes how son is recovering from vicious random attack, Grade three car lover goes to Auto Show, Sudbury teen pursues acting career and overcomes bullying and Orleans Ontario teen wins 100K Loran prize. Full Article Radio/The Story from Here
comes Research Filter: Seal comes off second best after fight with Australian ghostshark By www.abc.net.au Published On :: Thu, 07 May 2020 18:52:00 +1000 Extensive medical scanning of a seal found at Cape Conran on the Victorian east coast has revealed not one, but six fish spines embedded in the seal's face after the fight of its life. Full Article Science and Technology Research Organisations Medical Research Psychology Education Subjects
comes Country town welcomes young medical graduate with lawn bowls, brass bands and cakes By www.abc.net.au Published On :: Thu, 07 May 2020 09:33:11 +1000 Jenny Han finds herself in the thick of country life, despite social distancing, after moving from the city to kickstart her career. Full Article Health University and Further Education Regional Radiology Multiculturalism
comes Renewal SA worker becomes first public servant charged with breaching ICAC secrecy rules By www.abc.net.au Published On :: Mon, 09 Sep 2019 14:39:00 +1000 A former employee at Renewal SA becomes the first public servant charged with breaching secrecy provisions surrounding investigations by SA's Independent Commissioner Against Corruption. Full Article ABC South East SA adelaide southeastsa Law Crime and Justice:All:All Law Crime and Justice:Corruption:All Law Crime and Justice:Courts and Trials:All Law Crime and Justice:Prisons and Punishment:All Australia:All:All Australia:SA:Adelaide 5000 Australia:SA:All Australia:SA:Mount Gambier 5290
comes Noosa bushfire comes within metres of homes as Bribie fire continues to burn By www.abc.net.au Published On :: Fri, 23 Aug 2019 17:17:00 +1000 Residents of Noosa Springs have a close call when a bushfire comes within metres of homes, while fires continue to burn on Bribie Island. Full Article ABC Sunshine Coast brisbane sunshine Disasters and Accidents:Emergency Incidents:All Disasters and Accidents:Fires:Bushfire Environment:Environmental Impact:All Australia:QLD:All Australia:QLD:Bribie Island 4507 Australia:QLD:Brisbane 4000 Australia:QLD:Maroochydore 4558 Australia:QLD:Noosa Heads 4567
comes Slogan becomes popular photo setting By www.abc.net.au Published On :: Fri, 06 Sep 2019 10:14:00 +1000 Full Article ABC Sunshine Coast sunshine widebay Community and Society:All:All Human Interest:People:All Australia:QLD:Maroochydore 4558 Australia:QLD:Rainbow Beach 4581
comes Kukerin farmer welcomes the State Government's changes to land clearing regulation By www.abc.net.au Published On :: Tue, 03 Dec 2013 19:17:00 +1100 Full Article ABC South Coast southcoast Environment:Land Clearing:All Environment:Land Management:All Rural:Agricultural Crops:Grain Rural:All:All Australia:WA:Kukerin 6352
comes I've got 43 cents in my bank account. Why would I care who becomes the next premier? By www.abc.net.au Published On :: Thu, 30 Apr 2020 05:59:36 +1000 Six months out from Queenslanders heading to the polls to elect the next state government, coronavirus has cast a shadow over the entire process as families and businesses struggle to survive — will anyone care who the next premier is? Full Article Public Sector Government and Politics State Elections Elections COVID-19 One Nation Minor Parties Liberal National Party Political Parties Alp Community and Society Social Distancing Human Interest People Diseases and Disorders Health Activism and Lobbying Epidemics and Pandemics