<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Data Visualization on Grant Lucas</title>
    <link>https://grantlucas.com/tags/data-visualization/</link>
    <description>Recent content in Data Visualization on Grant Lucas</description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Mon, 13 Mar 2017 11:38:24 -0400</lastBuildDate>
    <atom:link href="https://grantlucas.com/tags/data-visualization/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Confoo 2017 Takeaways</title>
      <link>https://grantlucas.com/posts/2017/03/confoo-2017-takeaways/</link>
      <pubDate>Mon, 13 Mar 2017 11:38:24 -0400</pubDate>
      <guid>https://grantlucas.com/posts/2017/03/confoo-2017-takeaways/</guid>
      <description>&lt;p&gt;Last week &lt;a href=&#34;https://confoo.ca/en/yul2017&#34;&gt;Confoo&lt;/a&gt; took place in Montreal. This&#xA;has always been a good conference in that there&amp;rsquo;s quite a bit of variety in&#xA;talks offered. No matter your interests, there will be talks of interest for&#xA;you. It&amp;rsquo;s a pretty pricey conference though but normal compared to many larger&#xA;conferences. This post covers some of the main points that I took away from the&#xA;talks I attended. Mainly for my own long term reference but maybe it&amp;rsquo;ll be&#xA;useful to others.&lt;/p&gt;&#xA;&lt;p&gt;I won&amp;rsquo;t go into details on implementation below as there&amp;rsquo;s a lot of information&#xA;out there on each subject already. From the talks at Confoo, I aimed for ones&#xA;that were more architecture focused with as little language specific info as&#xA;possible. This provided a lot of theoretical information leaving the practical&#xA;information flexible for whatever implantation is desired.&lt;/p&gt;&#xA;&lt;h2 id=&#34;microservices&#34;&gt;Microservices&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#microservices&#34; title=&#34;Click to copy link&#34;&gt;&lt;i class=&#34;fas fa-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;In the past I&amp;rsquo;ve worked on a number of very &amp;ldquo;large&amp;rdquo; applications where all code&#xA;and logic is kept under a single codebase/cms/framework which, while simpler at&#xA;the beginning, can easily get out of control as time goes on. New features are&#xA;often added to the existing application without fully analyzing whether it&#xA;really needs to live within that application. Over time, the application grows&#xA;and grows with features that should probably live outside of it. Customizations&#xA;of the underlying framework may take place to handle all the new use cases&#xA;making upgrading more and more troublesome.&lt;/p&gt;&#xA;&lt;p&gt;I &lt;em&gt;think&lt;/em&gt; one of the main hindrances to &amp;ldquo;defaulting&amp;rdquo; to microservices instead&#xA;of the main application is the overhead to setting up a &lt;em&gt;new&lt;/em&gt; application every&#xA;time. There are many &lt;a href=&#34;https://github.com/tuupola/slim-api-skeleton&#34;&gt;skeleton&#xA;codebases&lt;/a&gt; to aid the initial&#xA;setup but I&amp;rsquo;ve found that these have been great for reference instead of&#xA;actually using them as the start of the application. Since everyone has their&#xA;own way of doing things, after setting up a few microservices, I imagine your&#xA;own skeleton code base will be formed for the way you or your company works.&#xA;This will greatly reduce the overhead for future services.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;In summary,&lt;/strong&gt; aiming for multiple smaller applications instead of a monolith&#xA;should create a more maintainable application over the long run in exchange for&#xA;some more overhead and setup at the beginning which should get easier with time&#xA;and practice.&lt;/p&gt;&#xA;&lt;h2 id=&#34;data-visualization--dashboards&#34;&gt;Data Visualization &amp;amp; Dashboards&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#data-visualization--dashboards&#34; title=&#34;Click to copy link&#34;&gt;&lt;i class=&#34;fas fa-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve used them in the past and it&amp;rsquo;s fairly common knowledge these days that&#xA;&amp;ldquo;application dashboards&amp;rdquo; are &lt;em&gt;extremely&lt;/em&gt; useful in the world of the web. Seeing&#xA;trends and information at a glance can tell you whether that last deploy made&#xA;things better or worse or it can highlight an area of improvement for the&#xA;application. In the past I&amp;rsquo;ve used &lt;a href=&#34;https://www.librato.com/&#34;&gt;Librato&lt;/a&gt; which was&#xA;a &lt;em&gt;great&lt;/em&gt; data store and visualizer adhering to the&#xA;&lt;a href=&#34;https://github.com/etsy/statsd&#34;&gt;StatsD&lt;/a&gt; format of sending data. At the time I&#xA;used Librato, other open source time series DBs such as&#xA;&lt;a href=&#34;http://graphite.readthedocs.io/en/latest/index.html&#34;&gt;Graphite&lt;/a&gt; weren&amp;rsquo;t the best&#xA;to get set up and the final interface was lacking. I attended a few talks around&#xA;dashboards specifically to see what has changed in the past few years.&lt;/p&gt;&#xA;&lt;p&gt;I was happy to learn of &lt;a href=&#34;http://grafana.org/&#34;&gt;Grafana&lt;/a&gt; which would replace the&#xA;visuals of Graphite. It has a very beautiful UI and I&amp;rsquo;m hoping the installation&#xA;process will be simpler than Graphite. I&amp;rsquo;m looking forward to giving this a try&#xA;in the near future.&lt;/p&gt;&#xA;&lt;p&gt;I also learned of &lt;a href=&#34;https://www.elastic.co/products/logstash&#34;&gt;Logstash&lt;/a&gt; which can&#xA;be installed on servers to automatically parse log files and extract things like&#xA;response codes and times from web servers. This is a really easy &amp;ldquo;win&amp;rdquo; for data&#xA;gathering as it can be installed and automatically tracked without any changes&#xA;to an application&amp;rsquo;s setup.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ll also be looking into time series databases to store the data such as&#xA;&lt;a href=&#34;https://www.influxdata.com/&#34;&gt;InfluxDB&lt;/a&gt;. I&amp;rsquo;d definitely aim to keep the&#xA;visualization and data storage separate this time around so that if a better&#xA;visualizer comes along, switching while keeping the underlying data-store will&#xA;be simpler. I&amp;rsquo;m starting to lean more and more to this separation of concerns in&#xA;application so that there&amp;rsquo;s flexibility in tools and less burden when&#xA;changing/upgrading one or the other.&lt;/p&gt;&#xA;&lt;p&gt;I look forward to getting a &amp;ldquo;stats&amp;rdquo; server up and running as soon as possible to&#xA;get back some of that valuable information these dashboard provide.&lt;/p&gt;&#xA;&lt;h2 id=&#34;circuit-breakers&#34;&gt;Circuit Breakers&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#circuit-breakers&#34; title=&#34;Click to copy link&#34;&gt;&lt;i class=&#34;fas fa-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;I had never really heard of or used &amp;ldquo;circuit breakers&amp;rdquo; in the past so this was a&#xA;good concept to be exposed to. Especially when dealing with applications that&#xA;are using microservices or communicating with 3rd party APIs.&lt;/p&gt;&#xA;&lt;p&gt;The most basic circuit breaker is to monitor an API call to ensure it succeeded&#xA;or timed out. &lt;strong&gt;If it succeeded,&lt;/strong&gt; all&amp;rsquo;s well, and there&amp;rsquo;s nothing special to&#xA;do. &lt;strong&gt;If it timed out,&lt;/strong&gt; or is otherwise unreachable, something might be wrong&#xA;with the endpoint so there&amp;rsquo;s no point flooding it with calls, potentially&#xA;making the situation worse. Set a timer for when to try another call. After that&#xA;time is up, try one more call to the endpoint to check if things have changed.&#xA;If it succeeded, clear the timer and report the endpoint as healthy. If it is&#xA;still unreachable, set it to unhealthy and restart the timer for the next retry.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;For example,&lt;/em&gt; if your user authentication is an external endpoint and calls to&#xA;it start failing, you can block login attempts and display a message on the&#xA;login page. Though a user still can&amp;rsquo;t log in, knowing that something is wrong is&#xA;much better than endlessly waiting or erring out while the target endpoint is&#xA;down.  This allows for parts of your application to &amp;ldquo;go down&amp;rdquo; while not taking&#xA;down the whole.&lt;/p&gt;&#xA;&lt;h2 id=&#34;confoo-itself&#34;&gt;Confoo itself&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#confoo-itself&#34; title=&#34;Click to copy link&#34;&gt;&lt;i class=&#34;fas fa-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Overall Confoo is a great conference to attend. Personally, there were very few&#xA;time blocks where I couldn&amp;rsquo;t find something I was actively interested in. There&#xA;were even a few where I had to make some compromises and miss a talk I was&#xA;looking forward to in favour of another one.&lt;/p&gt;&#xA;&lt;p&gt;One thing that stood out was the food! They had fresh coffee stations for all&#xA;your latte needs and the lunches provided were top notch. Chicken, pasta, and&#xA;roast, all very tasty and well prepared.&lt;/p&gt;&#xA;&lt;p&gt;If you&amp;rsquo;ve never been to Confoo, and if you have someone to sponsor you a ticket&#xA;;), I highly recommend you check it out next year in Montreal. They&amp;rsquo;ve also&#xA;recently started hosting one in &lt;a href=&#34;https://confoo.ca/en/yvr2017&#34;&gt;Vancouver&lt;/a&gt; if&#xA;you&amp;rsquo;re on the west coast.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
