<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Crypto Dashboard LiveView course on Poeticoding</title><link>https://www.poeticoding.com/category/phoenix/crypto-dashboard-liveview-course/</link><description>Recent content in Crypto Dashboard LiveView course on Poeticoding</description><generator>Hugo</generator><language>en</language><lastBuildDate>Tue, 23 Nov 2021 16:16:52 +0000</lastBuildDate><atom:link href="https://www.poeticoding.com/category/phoenix/crypto-dashboard-liveview-course/index.xml" rel="self" type="application/rss+xml"/><item><title>Phoenix LiveView LiveComponents</title><link>https://www.poeticoding.com/phoenix-liveview-livecomponents/</link><pubDate>Tue, 23 Nov 2021 16:09:36 +0000</pubDate><guid>https://www.poeticoding.com/phoenix-liveview-livecomponents/</guid><description>&lt;div class="video">&lt;iframe src="https://www.youtube-nocookie.com/embed/U2D2woBthcc" title="YouTube video" loading="lazy" allow="accelerometer; encrypted-media; gyroscope; picture-in-picture" allowfullscreen referrerpolicy="strict-origin-when-cross-origin">&lt;/iframe>&lt;/div>

&lt;p>&lt;a href="https://www.poeticoding.com/introductory-phoenix-liveview-course/">&lt;strong>Course Index page&lt;/strong>&lt;/a>&lt;/p>
&lt;h2 id="code">Code&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://github.com/poeticoding/poeticoins/tree/live-component" target="_blank" rel="noopener">&lt;code>live-component&lt;/code> branch&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/poeticoding/poeticoins/pull/18" target="_blank" rel="noopener">Pull Request&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/poeticoding/poeticoins/blob/live-component/lib/poeticoins_web/live/product_component.ex" target="_blank" rel="noopener">&lt;code>product_component.ex&lt;/code>&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="links">Links&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://hexdocs.pm/phoenix_live_view/Phoenix.LiveComponent.html" target="_blank" rel="noopener">Phoenix.LiveComponent&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://hexdocs.pm/phoenix_live_view/Phoenix.LiveView.Helpers.html#live_component/4" target="_blank" rel="noopener">&lt;code>live_component/4&lt;/code>&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://hexdocs.pm/phoenix_live_view/Phoenix.LiveComponent.html#module-stateful-components-life-cycle" target="_blank" rel="noopener">Stateful components&lt;/a>&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>We&amp;rsquo;ve just started to build our &lt;a href="https://github.com/poeticoding/poeticoins/blob/dashboard-ui/lib/poeticoins_web/live/crypto_dashboard_live.ex" target="_blank" rel="noopener">&lt;code>CryptoDashboardLive&lt;/code> view&lt;/a>, and we already have the feeling that the we are piling up a lot of code into the single &lt;code>CryptoDashboardLive&lt;/code> module. It&amp;rsquo;s not just about the template in the &lt;a href="https://github.com/poeticoding/poeticoins/blob/dashboard-ui/lib/poeticoins_web/live/crypto_dashboard_live.ex#L11" target="_blank" rel="noopener">&lt;code>render/1&lt;/code>&lt;/a> function, we could easily move it into a &lt;code>.leex&lt;/code> file. The risk is to find us with a single massive live view module which handles every aspect of our page, making che code hard to read and maintain. This page already has different parts with different responsibilities, for example: product cards where each one shows its product price, a toolbar with a dropdown to add products to the dashboard&amp;hellip;&lt;/p></description></item><item><title>A nice Dashboard UI</title><link>https://www.poeticoding.com/a-nice-dashboard-ui/</link><pubDate>Tue, 23 Nov 2021 15:35:40 +0000</pubDate><guid>https://www.poeticoding.com/a-nice-dashboard-ui/</guid><description>&lt;div class="video">&lt;iframe src="https://www.youtube-nocookie.com/embed/DVIrfx0CiLc" title="YouTube video" loading="lazy" allow="accelerometer; encrypted-media; gyroscope; picture-in-picture" allowfullscreen referrerpolicy="strict-origin-when-cross-origin">&lt;/iframe>&lt;/div>

&lt;p>&lt;a href="https://www.poeticoding.com/introductory-phoenix-liveview-course/">Course Index page&lt;/a>&lt;/p>
&lt;h2 id="code">Code&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://github.com/poeticoding/poeticoins/tree/dashboard-ui" target="_blank" rel="noopener">&lt;em>dashboard-ui&lt;/em> repo&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/poeticoding/poeticoins/blob/dashboard-ui/assets/css/poeticoins.scss" target="_blank" rel="noopener">&lt;code>assets/css/poeticoins.scss&lt;/code>&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://raw.githubusercontent.com/poeticoding/poeticoins/d7978efc38d2b04d4ff67cfffb44dc1f1721313e/assets/static/images/background.svg" target="_blank" rel="noopener">&lt;code>assets/static/images/background.svg&lt;/code>&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://raw.githubusercontent.com/poeticoding/poeticoins/d7978efc38d2b04d4ff67cfffb44dc1f1721313e/assets/static/images/cryptos/btc.svg" target="_blank" rel="noopener">&lt;code>assets/static/images/cryptos/btc.svg&lt;/code>&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://raw.githubusercontent.com/poeticoding/poeticoins/d7978efc38d2b04d4ff67cfffb44dc1f1721313e/assets/static/images/cryptos/eth.svg" target="_blank" rel="noopener">&lt;code>assets/static/images/cryptos/eth.svg&lt;/code>&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://raw.githubusercontent.com/poeticoding/poeticoins/d7978efc38d2b04d4ff67cfffb44dc1f1721313e/assets/static/images/cryptos/ltc.svg" target="_blank" rel="noopener">&lt;code>assets/static/images/cryptos/ltc.svg&lt;/code>&lt;/a>&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>Before going on with LiveComponents and other topics, let&amp;rsquo;s spend a few minutes on our UI. At the moment products and trades are rendered in a table, using the default &lt;code>phoenix.css&lt;/code>.&lt;/p></description></item><item><title>Bindings, Click and Form events, Debounce, Live Flash messages</title><link>https://www.poeticoding.com/bindings-click-and-form-events-debounce-live-flash-messages/</link><pubDate>Wed, 30 Jun 2021 11:24:56 +0000</pubDate><guid>https://www.poeticoding.com/bindings-click-and-form-events-debounce-live-flash-messages/</guid><description>&lt;div class="video">&lt;iframe src="https://www.youtube-nocookie.com/embed/z5wUETGuzXc" title="YouTube video" loading="lazy" allow="accelerometer; encrypted-media; gyroscope; picture-in-picture" allowfullscreen referrerpolicy="strict-origin-when-cross-origin">&lt;/iframe>&lt;/div>

&lt;p>&lt;a href="https://www.poeticoding.com/introductory-phoenix-liveview-course/">Course Index page&lt;/a>&lt;/p>
&lt;h2 id="code">Code&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://github.com/poeticoding/poeticoins/tree/bindings-click-form-events" target="_blank" rel="noopener">&lt;code>bindings-click-form-events&lt;/code> branch&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/poeticoding/poeticoins/commit/dc95b27f1a5bdc1d5a44b53d22fbab532efef11e" target="_blank" rel="noopener">fix filtering issue&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="links">Links&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://hexdocs.pm/phoenix_live_view/Phoenix.LiveView.html#c:handle_event/3" target="_blank" rel="noopener">handle_event/3&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://hexdocs.pm/phoenix_live_view/bindings.html" target="_blank" rel="noopener">Bindings&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://hexdocs.pm/phoenix_live_view/bindings.html#click-events" target="_blank" rel="noopener">Click events&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://hexdocs.pm/phoenix_live_view/form-bindings.html" target="_blank" rel="noopener">Form events&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://hexdocs.pm/phoenix_live_view/bindings.html#rate-limiting-events-with-debounce-and-throttle" target="_blank" rel="noopener">Rate limiting&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://hexdocs.pm/phoenix_live_view/Phoenix.LiveView.html#put_flash/3" target="_blank" rel="noopener">&lt;code>put_flash/3&lt;/code>&lt;/a>&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>Until this moment we only dealt with a passive view, which receives updates from the server, but that doesn&amp;rsquo;t provide any user interaction.&lt;/p></description></item><item><title>Layouts and LiveEEx templates</title><link>https://www.poeticoding.com/layouts-and-liveeex-templates/</link><pubDate>Tue, 25 May 2021 11:14:16 +0000</pubDate><guid>https://www.poeticoding.com/layouts-and-liveeex-templates/</guid><description>&lt;div class="video">&lt;iframe src="https://www.youtube-nocookie.com/embed/2Sc0eOauH2k" title="YouTube video" loading="lazy" allow="accelerometer; encrypted-media; gyroscope; picture-in-picture" allowfullscreen referrerpolicy="strict-origin-when-cross-origin">&lt;/iframe>&lt;/div>

&lt;p>&lt;a href="https://www.poeticoding.com/introductory-phoenix-liveview-course/">Course Index page&lt;/a>&lt;/p>
&lt;h1 id="code">Code&lt;/h1>
&lt;ul>
&lt;li>&lt;a href="https://github.com/poeticoding/poeticoins/tree/lv-first-view" target="_blank" rel="noopener">&lt;code>lv-first-view&lt;/code> branch&lt;/a>&lt;/li>
&lt;/ul>
&lt;h1 id="links">Links&lt;/h1>
&lt;ul>
&lt;li>&lt;a href="https://hexdocs.pm/phoenix/views.html#layouts" target="_blank" rel="noopener">Phoenix Layouts&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://hexdocs.pm/phoenix_live_view/live-layouts.html" target="_blank" rel="noopener">Live Layouts&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://hexdocs.pm/phoenix_live_view/live-layouts.html" target="_blank" rel="noopener">Assigns and LiveEEx templates&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://hexdocs.pm/phoenix_live_view/assigns-eex.html#liveeex-pitfalls" target="_blank" rel="noopener">Updating the HTML document title&lt;/a>&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>&lt;a href="https://www.poeticoding.com/how-phoenix-liveview-works/">We&amp;rsquo;ve previously seen in detail how Phoenix LiveView works&lt;/a>. In this lesson we are going to see:&lt;/p></description></item><item><title>How Phoenix LiveView works</title><link>https://www.poeticoding.com/how-phoenix-liveview-works/</link><pubDate>Tue, 27 Apr 2021 11:20:08 +0000</pubDate><guid>https://www.poeticoding.com/how-phoenix-liveview-works/</guid><description>&lt;div class="video">&lt;iframe src="https://www.youtube-nocookie.com/embed/pq5eOJRCkow" title="YouTube video" loading="lazy" allow="accelerometer; encrypted-media; gyroscope; picture-in-picture" allowfullscreen referrerpolicy="strict-origin-when-cross-origin">&lt;/iframe>&lt;/div>

&lt;hr>
&lt;p>&lt;a href="https://www.poeticoding.com/introductory-phoenix-liveview-course/">Course Index page&lt;/a>&lt;/p>
&lt;h2 id="code">Code&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://github.com/poeticoding/poeticoins/tree/how-lv-works" target="_blank" rel="noopener">GitHub: how-lv-works&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/poeticoding/poeticoins/blob/how-lv-works/lib/poeticoins_web/live/crypto_dashboard_live.ex" target="_blank" rel="noopener">crypto_dashboard_live.ex&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/poeticoding/poeticoins/blob/how-lv-works/assets/js/app.js" target="_blank" rel="noopener">&lt;code>app.js&lt;/code>&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="links">Links&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://hexdocs.pm/phoenix_live_view/Phoenix.LiveView.html#module-life-cycle" target="_blank" rel="noopener">Life-cycle&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://hexdocs.pm/phoenix_live_view/Phoenix.LiveView.html#connected?/1" target="_blank" rel="noopener">&lt;code>socket.connected?&lt;/code>&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/patrick-steele-idem/morphdom" target="_blank" rel="noopener">morphdom&lt;/a>&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="how-does-liveview-work">How does LiveView work?&lt;/h2>
&lt;p>In the &lt;a href="https://www.poeticoding.com/first-contact-with-phoenix-liveview/">previous lesson&lt;/a> we got a taste of the LiveView&amp;rsquo;s magic! In this lesson we are going to see how LiveView really works and what happens behind the scenes when a user connects.&lt;/p></description></item><item><title>First contact with Phoenix LiveView</title><link>https://www.poeticoding.com/first-contact-with-phoenix-liveview/</link><pubDate>Tue, 13 Apr 2021 18:46:05 +0000</pubDate><guid>https://www.poeticoding.com/first-contact-with-phoenix-liveview/</guid><description>&lt;div class="video">&lt;iframe src="https://www.youtube-nocookie.com/embed/9ZTm0R5YU64" title="YouTube video" loading="lazy" allow="accelerometer; encrypted-media; gyroscope; picture-in-picture" allowfullscreen referrerpolicy="strict-origin-when-cross-origin">&lt;/iframe>&lt;/div>

&lt;p>&lt;a href="https://www.poeticoding.com/introductory-phoenix-liveview-course/">&lt;strong>Course Index page&lt;/strong>&lt;/a>&lt;/p>
&lt;h2 id="code">Code&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://github.com/poeticoding/poeticoins/tree/lv-first-view" target="_blank" rel="noopener">&lt;code>lv-first-view&lt;/code> branch&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/poeticoding/poeticoins/pull/15" target="_blank" rel="noopener">Lesson&amp;rsquo;s PR&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/poeticoding/poeticoins/blob/lv-first-view/lib/poeticoins_web/live/crypto_dashboard_live.ex" target="_blank" rel="noopener">&lt;code>PoeticoinsWeb.CryptoDashboardLive&lt;/code>&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="links">Links&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://hexdocs.pm/phoenix_live_view/Phoenix.LiveView.html#c:mount/3" target="_blank" rel="noopener">mount/3&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://hexdocs.pm/phoenix_live_view/Phoenix.LiveView.html#c:render/1" target="_blank" rel="noopener">ren&lt;/a>&lt;a href="https://hexdocs.pm/phoenix_live_view/Phoenix.LiveView.html#c:render/1" target="_blank" rel="noopener">d&lt;/a>&lt;a href="https://hexdocs.pm/phoenix_live_view/Phoenix.LiveView.html#c:render/1" target="_blank" rel="noopener">er/1&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://hexdocs.pm/phoenix_live_view/Phoenix.LiveView.html#assign/3" target="_blank" rel="noopener">assign/3&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://hexdocs.pm/phoenix_live_view/Phoenix.LiveView.html#update/3" target="_blank" rel="noopener">update/3&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://hexdocs.pm/phoenix_live_view/Phoenix.LiveView.Helpers.html#sigil_L/2" target="_blank" rel="noopener">~L&lt;/a>&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="our-first-live-view">Our first Live View&lt;/h2>
&lt;p>In this lesson we&amp;rsquo;ll introduce LiveView and get a sense of how powerful it can be. In the next lesson we&amp;rsquo;ll see better how LiveView works under the hood.&lt;/p></description></item><item><title>Intro to Poeticoins Elixir application</title><link>https://www.poeticoding.com/phoenix-liveview-intro-to-poeticoins-elixir-application/</link><pubDate>Sat, 27 Mar 2021 11:51:14 +0000</pubDate><guid>https://www.poeticoding.com/phoenix-liveview-intro-to-poeticoins-elixir-application/</guid><description>&lt;div class="video">&lt;iframe src="https://www.youtube-nocookie.com/embed/QJszKVQLZ7Y" title="YouTube video" loading="lazy" allow="accelerometer; encrypted-media; gyroscope; picture-in-picture" allowfullscreen referrerpolicy="strict-origin-when-cross-origin">&lt;/iframe>&lt;/div>

&lt;p>&lt;a href="https://www.poeticoding.com/introductory-phoenix-liveview-course/">Course Index page&lt;/a>&lt;/p>
&lt;p>&lt;strong>Poeticoins GitHub repository&lt;/strong>: &lt;a href="https://github.com/poeticoding/poeticoins/tree/cicd-gh-gigalixir" target="_blank" rel="noopener">poeticoding/poeticoins&lt;/a>&lt;/p></description></item><item><title>Application Design</title><link>https://www.poeticoding.com/phoenix-liveview-application-design/</link><pubDate>Tue, 23 Mar 2021 18:43:56 +0000</pubDate><guid>https://www.poeticoding.com/phoenix-liveview-application-design/</guid><description>&lt;div class="video">&lt;iframe src="https://www.youtube-nocookie.com/embed/DOYMep5xXp4" title="YouTube video" loading="lazy" allow="accelerometer; encrypted-media; gyroscope; picture-in-picture" allowfullscreen referrerpolicy="strict-origin-when-cross-origin">&lt;/iframe>&lt;/div>

&lt;p>&lt;a href="https://www.poeticoding.com/introductory-phoenix-liveview-course/">Course Index page&lt;/a>&lt;/p>
&lt;p>In this course we&amp;rsquo;ll build a Phoenix LiveView app (called &lt;a href="https://coins.poeticoding.com/">Poeticoins&lt;/a>) that gets real-time trades from multiple cryptocurrency exchanges and, with LiveView, it displays prices, and other data, on an interactive dashboard.&lt;/p>
&lt;!-- BROKEN IMAGE: https://cdn.fs.teachablecdn.com/resize=width:2500/iMyDdFqTtuOtrc7bJJV6 | app_goal.png -->
&lt;p>Since the dashboard just shows the most recent data, we won&amp;rsquo;t need any database. We&amp;rsquo;ll see how to use Elixir processes to temporarily keep all we need in memory.&lt;/p></description></item><item><title>Intro to Cryptocurrency Exchanges</title><link>https://www.poeticoding.com/phoenix-liveview-intro-to-cryptocurrency-exchanges/</link><pubDate>Tue, 23 Mar 2021 16:22:16 +0000</pubDate><guid>https://www.poeticoding.com/phoenix-liveview-intro-to-cryptocurrency-exchanges/</guid><description>&lt;div class="video">&lt;iframe src="https://www.youtube-nocookie.com/embed/tu40uo7Jq7g" title="YouTube video" loading="lazy" allow="accelerometer; encrypted-media; gyroscope; picture-in-picture" allowfullscreen referrerpolicy="strict-origin-when-cross-origin">&lt;/iframe>&lt;/div>

&lt;p>&lt;a href="https://www.poeticoding.com/introductory-phoenix-liveview-course/">Course Index page&lt;/a>&lt;/p>
&lt;p>I&amp;rsquo;ve decided to build this Phoenix LiveView course around a Cryptocurrency dashboard example because Cryptocurrency Exchanges are a fantastic, often public, source of realtime data. Don&amp;rsquo;t be scared if you don&amp;rsquo;t know anything about cryptocurrencies or exchanges, I&amp;rsquo;m going to explain everything we need to start playing with this data.&lt;/p></description></item></channel></rss>