<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Threadbox.net]]></title><description><![CDATA[Notes and Musings about Things of Interest]]></description><link>https://threadbox.net/</link><image><url>https://threadbox.net/favicon.png</url><title>Threadbox.net</title><link>https://threadbox.net/</link></image><generator>Ghost 3.37</generator><lastBuildDate>Sun, 07 Feb 2021 22:16:27 GMT</lastBuildDate><atom:link href="https://threadbox.net/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Is Object-Oriented Programming a Trillion Dollar Disaster?]]></title><description><![CDATA[<p>This article lays out the case that the OOP path which Java led the industry down is a terrible idea, leading to great difficulties without apparent payoff. Polarizing an idea as this is, it's one which that I've recently given considerable thought.</p><p>Original article: <a href="https://medium.com/better-programming/object-oriented-programming-the-trillion-dollar-disaster-%EF%B8%8F-92a4b666c7c7">https://medium.com/better-programming/object-oriented-programming-the-trillion-dollar-disaster-%EF%</a></p>]]></description><link>https://threadbox.net/is-object-oriented-programming-a-trillion-dollar-disaster/</link><guid isPermaLink="false">5d35d45bb4b60b0001437379</guid><dc:creator><![CDATA[Adam Bellinson]]></dc:creator><pubDate>Mon, 22 Jul 2019 15:56:28 GMT</pubDate><content:encoded><![CDATA[<p>This article lays out the case that the OOP path which Java led the industry down is a terrible idea, leading to great difficulties without apparent payoff. Polarizing an idea as this is, it's one which that I've recently given considerable thought.</p><p>Original article: <a href="https://medium.com/better-programming/object-oriented-programming-the-trillion-dollar-disaster-%EF%B8%8F-92a4b666c7c7">https://medium.com/better-programming/object-oriented-programming-the-trillion-dollar-disaster-%EF%B8%8F-92a4b666c7c7</a></p><p>Slashdot page: <a href="https://developers.slashdot.org/story/19/07/22/0426201/is-object-oriented-programming-a-trillion-dollar-disaster">https://developers.slashdot.org/story/19/07/22/0426201/is-object-oriented-programming-a-trillion-dollar-disaster</a></p>]]></content:encoded></item><item><title><![CDATA[How Concurrency Really Works]]></title><description><![CDATA[<p>Thanks to Igor Ostaptchenko for sharing this neat article. It explains the difference between concurrency and parallelism with respect to the BEAM. This is surely one of the really unique and compelling aspects of the core technology, leading to fault-tolerance features as much as scalability ones.</p><p><a href="https://medium.com/flatiron-labs/elixir-and-the-beam-how-concurrency-really-works-3cc151cddd61">https://medium.com/flatiron-labs/</a></p>]]></description><link>https://threadbox.net/how-concurrency-really-works/</link><guid isPermaLink="false">5ced874b6f78ff0001c9bd86</guid><dc:creator><![CDATA[Adam Bellinson]]></dc:creator><pubDate>Tue, 28 May 2019 19:10:17 GMT</pubDate><content:encoded><![CDATA[<p>Thanks to Igor Ostaptchenko for sharing this neat article. It explains the difference between concurrency and parallelism with respect to the BEAM. This is surely one of the really unique and compelling aspects of the core technology, leading to fault-tolerance features as much as scalability ones.</p><p><a href="https://medium.com/flatiron-labs/elixir-and-the-beam-how-concurrency-really-works-3cc151cddd61">https://medium.com/flatiron-labs/elixir-and-the-beam-how-concurrency-really-works-3cc151cddd61</a></p>]]></content:encoded></item><item><title><![CDATA[5 reasons Elixir can be your competitive advantage]]></title><description><![CDATA[<p><a href="https://www.elviovicosa.com/2019/03/29/5-reasons-elixir-competitive-advantage.html">https://www.elviovicosa.com/2019/03/29/5-reasons-elixir-competitive-advantage.html</a></p>]]></description><link>https://threadbox.net/5-reasons-elixir-can-be-your-competitive-advantage/</link><guid isPermaLink="false">5ca25bb7feb95a00015bb629</guid><dc:creator><![CDATA[Adam Bellinson]]></dc:creator><pubDate>Mon, 01 Apr 2019 18:43:10 GMT</pubDate><content:encoded><![CDATA[<p><a href="https://www.elviovicosa.com/2019/03/29/5-reasons-elixir-competitive-advantage.html">https://www.elviovicosa.com/2019/03/29/5-reasons-elixir-competitive-advantage.html</a></p>]]></content:encoded></item><item><title><![CDATA[Post-mortem: Lucidboard for Hack Week]]></title><description><![CDATA[<p>For our QL Hack Week, we began connecting the new and exciting <a href="https://dockyard.com/blog/2018/12/12/phoenix-liveview-interactive-real-time-apps-no-need-to-write-javascript">Phoenix LiveView</a> (<a href="https://github.com/phoenixframework/phoenix_live_view">github</a>) library into our <a href="https://github.com/djthread/lucidboard">Lucidboard</a> project. LiveView is allowing us to very rapidly wire up interactive user experiences by simply writing a bit of event handling code which updates the client's state. The technique employs websockets</p>]]></description><link>https://threadbox.net/post-mortem/</link><guid isPermaLink="false">5c952589feb95a00015bb5e6</guid><dc:creator><![CDATA[Adam Bellinson]]></dc:creator><pubDate>Fri, 22 Mar 2019 18:34:53 GMT</pubDate><content:encoded><![CDATA[<p>For our QL Hack Week, we began connecting the new and exciting <a href="https://dockyard.com/blog/2018/12/12/phoenix-liveview-interactive-real-time-apps-no-need-to-write-javascript">Phoenix LiveView</a> (<a href="https://github.com/phoenixframework/phoenix_live_view">github</a>) library into our <a href="https://github.com/djthread/lucidboard">Lucidboard</a> project. LiveView is allowing us to very rapidly wire up interactive user experiences by simply writing a bit of event handling code which updates the client's state. The technique employs websockets which hold the client's state on the server end, keeping everything scoped to a single application, and hugely simplifying the development process.</p><p>We were having great successes right from the start, and by the end of the week, the team was very jazzed about what the new approach could mean for the historically daunting task of building with a JavaScript framework like React or Angular.</p><p>Take for example the "like" button on a Lucidboard card. To implement this feature, we needed to do two things. First, we indicate to LiveView that we would like to send an event when the user clicks the heart icon, sending the card's id as a parameter in the view template:</p><pre><code>&lt;a phx-click="like" phx-value="&lt;%= @card.id %&gt;" href="#"&gt;
    &lt;%= fas("heart") %&gt; &lt;%= length(@card.likes) %&gt;
&lt;/a&gt;
        </code></pre><p>Then, we handle the event in the LiveView module:</p><pre><code>def handle_event("like", card_id, socket) do
  live_board_action({:like, id: card_id, user: user_id(socket)}, socket)
  {:noreply, socket}
end
</code></pre><p>In this case, we've simply executed the action against the running board and returned an unmodified state. The user will get the same board-update broadcast that all other users looking at the board will get which will increment the like count on the card. Whenever the board updates, all users looking at it will receive the event. It looks like this:</p><pre><code>def handle_info({:board, board}, socket) do
  {:noreply, assign(socket, :board, board)}
end
</code></pre><p>Underneath, whenever this state (stored in the socket) is updated, the templates re-render, and only the updated placeholders get pushed down to the client over the websocket connection. The client side then is using the pre-existing, open-source <a href="https://github.com/patrick-steele-idem/morphdom">morphdom</a> library which LiveView leverages to do an efficient patch on the DOM to bring it up to date. Chris McCord &amp; co. have demonstrated how all of this is so robust and efficient across the board. </p><p>Even as we went deeper, we found the patterns Chris has introduced with this library very logical, simple, and easy to use, and I imagine teams needing to build these single-page app experiences would be well-served to look closely. I'm really looking forward to using it more and learning further where the pitfalls may be and how it can super-charge my projects.</p>]]></content:encoded></item><item><title><![CDATA[Tech Notes for Hack Week]]></title><description><![CDATA[<p>For Hack Week, we're going to attempt to bring <a href="https://github.com/phoenixframework/phoenix_live_view">Phoenix LiveView</a> into <a href="https://github.com/djthread/lucidboard">Lucidboard</a> to create a snappy, interactive experience for our users. This post is just some notes to help us in the room.</p><h2 id="phoenix_live_view_example">phoenix_live_view_example</h2><p><a href="https://github.com/chrismccord/phoenix_live_view_example">phoenix_live_view_example</a> has many great hints as to how LiveView</p>]]></description><link>https://threadbox.net/tech-notes-for-hack-week/</link><guid isPermaLink="false">5c8eb3cbfeb95a00015bb5aa</guid><dc:creator><![CDATA[Adam Bellinson]]></dc:creator><pubDate>Sun, 17 Mar 2019 21:08:12 GMT</pubDate><content:encoded><![CDATA[<p>For Hack Week, we're going to attempt to bring <a href="https://github.com/phoenixframework/phoenix_live_view">Phoenix LiveView</a> into <a href="https://github.com/djthread/lucidboard">Lucidboard</a> to create a snappy, interactive experience for our users. This post is just some notes to help us in the room.</p><h2 id="phoenix_live_view_example">phoenix_live_view_example</h2><p><a href="https://github.com/chrismccord/phoenix_live_view_example">phoenix_live_view_example</a> has many great hints as to how LiveView works. I found the easiest way to get it going is to clone, then:</p><ol><li>Open <code>config/dev.exs</code>, find the <code>Demo.Repo</code> config at the very bottom, and add <code>port: 9977</code>.</li><li>Launch a postgres instance with <code>docker run -v demo_db_data:/var/lib/postgresql/data -p 9977:5432 --restart=always --name=demo_db -d postgres</code></li><li>Follow the other setup instructions in the example repo's README.md.</li><li>Launch the app! (<code>iex -S mix phx.server</code>) By default, it's accessible at <a href="http://localhost:4000">http://localhost:4000</a></li></ol><h3 id="ignoring-ssl-security">Ignoring SSL Security</h3><p>In the example repo, you might get an error from hex about ssl certificates. To solve this, export a variable. In fish, use <code>set -x HEX_UNSAFE_HTTPS 1</code>. In bash, use <code>export HEX_UNSAFE_HTTPS=1</code>.</p>]]></content:encoded></item><item><title><![CDATA[Phoenix LiveView is on GitHub!]]></title><description><![CDATA[<figure class="kg-card kg-image-card"><img src="https://threadbox.net/content/images/2019/03/6510388-2.png" class="kg-image" alt></figure><p>Chris McCord has <a href="https://twitter.com/chris_mccord/status/1106291353670045696">announced</a> that he's made his <a href="https://github.com/phoenixframework/phoenix_live_view">Phoenix LiveView</a> project public. (Good are in <a href="https://dockyard.com/blog/2018/12/12/phoenix-liveview-interactive-real-time-apps-no-need-to-write-javascript">this article</a>.) While a proper "release" is still yet to come, this represents an exciting moment many of us have been waiting for because we can now dig in, experiment with the technology, and even</p>]]></description><link>https://threadbox.net/phoenix-liveview-is-on-github/</link><guid isPermaLink="false">5c8be0fcfeb95a00015bb59a</guid><dc:creator><![CDATA[Adam Bellinson]]></dc:creator><pubDate>Fri, 15 Mar 2019 18:10:42 GMT</pubDate><content:encoded><![CDATA[<figure class="kg-card kg-image-card"><img src="https://threadbox.net/content/images/2019/03/6510388-2.png" class="kg-image" alt></figure><p>Chris McCord has <a href="https://twitter.com/chris_mccord/status/1106291353670045696">announced</a> that he's made his <a href="https://github.com/phoenixframework/phoenix_live_view">Phoenix LiveView</a> project public. (Good are in <a href="https://dockyard.com/blog/2018/12/12/phoenix-liveview-interactive-real-time-apps-no-need-to-write-javascript">this article</a>.) While a proper "release" is still yet to come, this represents an exciting moment many of us have been waiting for because we can now dig in, experiment with the technology, and even help with contributions.</p><p>For our QL Hack Week, starting March 18, we'll attempt to begin building client-side interactivity into the <a href="https://github.com/djthread/lucidboard">Lucidboard</a> project with this library. Stay tuned!</p>]]></content:encoded></item><item><title><![CDATA[Lonestar ElixirConf 2019 Highlights]]></title><description><![CDATA[<p>Here are a few notes about some of the talks that I really enjoyed at this Austin conference.</p><h2 id="keynote-about-nerves">Keynote about Nerves</h2><p>Justin Schneck spoke about his Nerves project, and they have been building some exciting things! Nerves is a toolchain which makes deploying Elixir applications (with linux) to embedded devices</p>]]></description><link>https://threadbox.net/lonestar-elixirconf-2019-highlights/</link><guid isPermaLink="false">5c7ef150feb95a00015bb553</guid><dc:creator><![CDATA[Adam Bellinson]]></dc:creator><pubDate>Thu, 07 Mar 2019 22:51:34 GMT</pubDate><content:encoded><![CDATA[<p>Here are a few notes about some of the talks that I really enjoyed at this Austin conference.</p><h2 id="keynote-about-nerves">Keynote about Nerves</h2><p>Justin Schneck spoke about his Nerves project, and they have been building some exciting things! Nerves is a toolchain which makes deploying Elixir applications (with linux) to embedded devices like Raspberry Pis a piece of cake. His talk discussed NervesHub, their new hosted or self-hosted solution for managing these built Nerves images. With this infrastructure, you can not only push and fetch these images, but also issue commands to deploy them to your live fleet of devices in a very secure fashion. He also mentioned NervesKey, a miniscule device which can be soldered to a device (or some are embedding it from the factory) which can serve as a hardware security token when interacting with NervesHub etc.</p><h2 id="cadre-building-reliable-distributed-stateful-systems-in-elixir">Cadre: Building reliable distributed stateful systems in Elixir</h2><p>Paul Schoenfelder, known for his Distillery project among many others, spoke about his almost-finished project, Cadre. Cadre is a tool in a similar vein to Jepsen which provides a framework for testing applications which run in a distributed fashion. This is a tricky problem domain that requires tricky solutions. With his tool, you can randomize the failures (like nodes going down etc) that occur over the lifecycle of your application and tests a great many scenarios very quickly. When an issue is found, the same scenario can be repeated by using the same "seed", so the fix can be properly confirmed.</p><p>While our runtime does put distributed solutions within reach, they still remain on the more difficult end of the spectrum, and many teams do absolutely fine without clustering.</p><h2 id="ecto-without-a-db">Ecto Without a DB</h2><p>Greg Vaughn spoke about using the Ecto library's Schema and Changeset parts to do data structuring and validation without its Query and Repo parts which are used to actually build queries and interact with a database. He showed how the functionality provided can give developers a very nice API for validating inputs, whether coming from a form or anywhere, so that you can be sure data entering the next layer meets your requirements. Obviously, this is usually very important, when working with a DB or not.</p><p>I think the fact that this is a natural option follows from the fact that Elixir's functional approach leads to neatly decoupled solutions.</p><h2 id="the-business-case-for-elixir">The Business Case for Elixir</h2><p>Brian Cardarella, founder &amp; chairman of DockYard, did a fantastic job of laying out our business case. I won't try and enumerate his points, but I would recommend this talk to anyone thinking about adopting Elixir from a company or enterprise level!</p><h2 id="keynote-about-oop-hegemony">Keynote about OOP Hegemony</h2><p>Osa Gaius-Obaseki made a really fantastic talk about the entrenched idea that OOP is how one builds software. With an upcoming interview with Google, he found it odd that they would require he use Java in the interview -- the position doesn't necessarily require Java! So, he found himself learning the language for the purpose of the interview. He spoke about the early days of Java, working with columnists to get "Java is a godsend which changes everything!" type articles written. These articles spoke to upper management types and less engineers. Java is largely credited for the ascension of OOP.</p><p>We're left today with a world in which OOP is the de-facto way build software and there seems to be little discussion of other options. For me, OOP seems to slow me down, lead me to introduce bugs, and make concurrent execution worlds more difficult.</p><p>Osa's talk was brilliant, and I would recommend it to folks looking for some discussion around this.</p><h2 id="keynote-about-liveview">Keynote about LiveView</h2><p>Chris McCord, author of the Phoenix framework, has been working furiously on his LiveView project which may turn out to be a paradigm-shifting technology in the space of building snappy, app-like, client-side interactivity as our current-day JavaScript SPA frameworks do, but without the convoluted JavaScript language and ecosystem at all!</p><p>To learn more detail, I recommend checking out his <a href="https://dockyard.com/blog/2018/12/12/phoenix-liveview-interactive-real-time-apps-no-need-to-write-javascript">recent article</a>.</p><h2 id="hastega-challenge-for-gpgpu-on-elixir">Hastega: Challenge for GPGPU on Elixir</h2><p>Susumu Yamazaki came in from Japan to share his team's work on Hastega with us. It's a very interesting project which is using <a href="https://www.rust-lang.org/">Rust</a> code with the <a href="https://github.com/hansihe/rustler">Rustler</a> in order to leverage not just the CPU as we normally do, but the GPU as well in order to execute computations. As this strategy is refined, it may be a very powerful drop-in tool for doing big data processing, for instance, using all the strengths of Elixir, with execution faster than a compiled language (not using the GPU as is typical) could manage.</p><h2 id="jos-valim-s-closing-keynote">José Valim's Closing Keynote</h2><p>José spent the first 10 minutes or so talking about the new <a href="https://erlef.org/">Erlang Ecosystem Foundation</a> that he's helping launch. This non-profit group of individuals, spanning many languages and specialties within the greater Erlang ecosystem, will be helping increase adoption by contributing to libraries, tools, and documentation.</p><p><a href="https://github.com/elixir-lang/gen_stage">GenStage</a> is already a potent tool for setting up data processing pipelines over a cluster of nodes, but José spent the rest of his time discussing his newly released tool, <a href="https://github.com/plataformatec/broadway">Broadway</a>. Having spent much time working with various companies on their GenStage setups, he found that certain issues continued to crop up. Broadway is a tool that will take some simple configuration parameters, and automatically start up a GenStage system in the ideal way.</p><p>I'm really interested to see how things develop with Elixir's role in the big data processing field. It's great to see it break into new areas, one by one.</p>]]></content:encoded></item><item><title><![CDATA[What is Elixir and Why Should I Care?]]></title><description><![CDATA[<p>This post is just a short collection of items that I think are valuable if you're just approaching <a href="https://elixir-lang.org/">Elixir</a> for the first time and are trying to understand what it is and why it is a strong option.</p><p>This <a href="https://www.se-radio.net/2018/08/se-radio-336-sasa-juric-on-elixir/">podcast episode</a> is a fantastic overview of the technology and how</p>]]></description><link>https://threadbox.net/what-is-elixir-and-why-should-i-care/</link><guid isPermaLink="false">5c816b2bfeb95a00015bb55a</guid><dc:creator><![CDATA[Adam Bellinson]]></dc:creator><pubDate>Thu, 07 Mar 2019 19:15:41 GMT</pubDate><content:encoded><![CDATA[<p>This post is just a short collection of items that I think are valuable if you're just approaching <a href="https://elixir-lang.org/">Elixir</a> for the first time and are trying to understand what it is and why it is a strong option.</p><p>This <a href="https://www.se-radio.net/2018/08/se-radio-336-sasa-juric-on-elixir/">podcast episode</a> is a fantastic overview of the technology and how it fits into the software engineering landscape, in general.</p><p>Brian Cardarella of DockYard has done a great talk, <a href="https://www.youtube.com/watch?v=jIwWsLTCC4s"><em>The Business Case for Elixir</em></a>. Check this one out if you're interested in the reasons for adoption, from a company's perspective.</p><p>Phoenix LiveView is a new library which could represent a paradigm shift in how many of us build SPAs. Chris McCord's <a href="https://dockyard.com/blog/2018/12/12/phoenix-liveview-interactive-real-time-apps-no-need-to-write-javascript">recent article</a> sheds some light on how it works. His even more recent <a href="https://www.youtube.com/watch?v=8xJzHq8ru0M">ElixirConf EU talk</a> goes deeper yet.</p><p>The runtime is incredibly efficient and handling many simultaneous users. Read about <a href="https://news.ycombinator.com/item?id=19238221">How Discord Scaled Elixir to 5M Concurrent Users</a> with only 4 full-time engineers or how <a href="https://www.techworld.com/apps-wearables/how-elixir-helped-bleacher-report-handle-8x-more-traffic-3653957/">Bleacher Report could reduce 150 servers running their Ruby on Rails app to 2</a> when they rewrote in Elixir.</p><p>I think the most exciting thing about the tool, for me, is simply how it leads me to write code that is so uncommonly easy to read, follow, refactor, and test. The fact that we embrace the thing that makes good OOP code, functional programming, is a big component of this, but the tooling and the features seem to generally draw from the best practices across the field, allowing me to stay focused on the problem at hand and iterate quickly. I think <a href="https://www.youtube.com/watch?v=US8QG9I1XW0">this talk</a> describes some of these ideas: using FP naturally (or sometimes forcibly!) leads you to "pits of success" where one ends up with good designs which are easy to reason about, test, etc. (The YouTube description is worth a read.)</p><p>A developer from Podium wrote a <a href="https://medium.com/podium-engineering/two-years-of-elixir-at-podium-thoughts-9f30defedb7d">great article</a> explaining how they have been all-in on Elixir for some time and, despite looking closely at a number of alternatives, couldn't be happier with their choice.</p><p>The book <em><a href="https://www.amazon.com/Adopting-Elixir-Production-Ben-Marx/dp/1680502522">Adopting Elixir</a></em> got a hearty recommendation from someone at the Lonestar ElixirConf in Austin I just returned from. The guy said it really sold his team and I imagine it would be a great explanation of the why &amp; how from a higher level than an actual intro to programming the language. I actually think the Elixir books from Pragmatic Programmers are good, in general. I originally learned the language from <a href="https://www.amazon.com/Programming-Elixir-1-6-Functional-Concurrent/dp/1680502999/"><em>Programming Elixir</em></a>.</p><p><a href="https://github.com/h4cc/awesome-elixir">The Awesome Elixir page</a> lists a great many learning resources, libraries and other useful goodies.</p><p>Saša Jurić, a well-respected member of the community, did a fantastic talk at GOTO 2019 about BEAM technology, <a href="https://www.youtube.com/watch?v=JvBT4XBdoUE">The Soul of Erlang and Elixir</a>.</p><p>Hopefully, I'll come back and add to this post in the future as I find stuff.</p>]]></content:encoded></item><item><title><![CDATA[Mint, a new HTTP client for Elixir]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>It's not technically the Elixir core team, but 2 members of the Elixir core team <a href="https://elixir-lang.org/blog/2019/02/25/mint-a-new-http-library-for-elixir/">are working on a new HTTP library</a>! It sounds nice because it aims to be a low-level, extendible foundation from which we can build more powerful components using BEAM processes etc. I'll be keeping the</p>]]></description><link>https://threadbox.net/mint-a-new-http-client-for-elixir/</link><guid isPermaLink="false">5c746e7cfeb95a00015bb54c</guid><dc:creator><![CDATA[Adam Bellinson]]></dc:creator><pubDate>Mon, 25 Feb 2019 22:46:50 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>It's not technically the Elixir core team, but 2 members of the Elixir core team <a href="https://elixir-lang.org/blog/2019/02/25/mint-a-new-http-library-for-elixir/">are working on a new HTTP library</a>! It sounds nice because it aims to be a low-level, extendible foundation from which we can build more powerful components using BEAM processes etc. I'll be keeping the ears peeled on this one.</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Lucidboard for Hack Week!]]></title><description><![CDATA[<p>For our upcoming QL Hack Week, we'll be making a project out of part of Lucidboard. We're really hoping to see LiveView drop before then so we can dive into building out the frontend SPA interaction, but if not, we'll instead focus on authentication &amp; authorization, hopefully integrating with the</p>]]></description><link>https://threadbox.net/lucidboard-for-hack-week/</link><guid isPermaLink="false">5c73fe67feb95a00015bb534</guid><dc:creator><![CDATA[Adam Bellinson]]></dc:creator><pubDate>Mon, 25 Feb 2019 14:44:10 GMT</pubDate><content:encoded><![CDATA[<p>For our upcoming QL Hack Week, we'll be making a project out of part of Lucidboard. We're really hoping to see LiveView drop before then so we can dive into building out the frontend SPA interaction, but if not, we'll instead focus on authentication &amp; authorization, hopefully integrating with the company's active directory service for our network logins.</p><p><a href="mailto:thread@threadbox.net">Let me know</a> if you're interested in participating!</p><p>Project description is <a href="https://quicken-loans.brightidea.com/D48113">on our Cheese Factory site</a>.</p>]]></content:encoded></item><item><title><![CDATA[Write Unbelievably Clean Concurrent Code in Elixir Using the Task Module]]></title><description><![CDATA[<p>I find that one of Elixir's greatest strengths is how it allows me to easily write clean, easy-to-follow code, in general. <a href="https://www.toptechskills.com/elixir-phoenix-tutorials-courses/clean-concurrent-code-elixir-task-module/">This article</a> (<a href="https://www.reddit.com/r/elixir/comments/aszlik/write_unbelievably_clean_concurrent_code_in/">reddit link</a>) explains how the language can be used to neatly express work to be executed concurrently.</p>]]></description><link>https://threadbox.net/write-unbelievably-clean-concurrent-code-in-elixir-using-the-task-module/</link><guid isPermaLink="false">5c704bbbfeb95a00015bb501</guid><dc:creator><![CDATA[Adam Bellinson]]></dc:creator><pubDate>Fri, 22 Feb 2019 21:50:28 GMT</pubDate><content:encoded><![CDATA[<p>I find that one of Elixir's greatest strengths is how it allows me to easily write clean, easy-to-follow code, in general. <a href="https://www.toptechskills.com/elixir-phoenix-tutorials-courses/clean-concurrent-code-elixir-task-module/">This article</a> (<a href="https://www.reddit.com/r/elixir/comments/aszlik/write_unbelievably_clean_concurrent_code_in/">reddit link</a>) explains how the language can be used to neatly express work to be executed concurrently.</p>]]></content:encoded></item><item><title><![CDATA[Meeting Notes, Feb 4]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>This meeting will be at 4 PM in Park Place (11 Monroe) and on <a href="http://shorty/elixirzoom">Zoom</a>, as always.</p>
<p>Work on <a href="https://github.com/djthread/lucidboard">Lucidboard</a> continues! Please reach out if you'd like to be involved in any way. We're looking for all types of help in bringing this Kanban tool to a usable state!</p>
<h2 id="lonestarelixirconf">Lonestar</h2>]]></description><link>https://threadbox.net/meeting-notes-feb-4/</link><guid isPermaLink="false">5c5882fc69c09a00019d5209</guid><dc:creator><![CDATA[Adam Bellinson]]></dc:creator><pubDate>Mon, 04 Feb 2019 18:03:14 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>This meeting will be at 4 PM in Park Place (11 Monroe) and on <a href="http://shorty/elixirzoom">Zoom</a>, as always.</p>
<p>Work on <a href="https://github.com/djthread/lucidboard">Lucidboard</a> continues! Please reach out if you'd like to be involved in any way. We're looking for all types of help in bringing this Kanban tool to a usable state!</p>
<h2 id="lonestarelixirconf">Lonestar ElixirConf!</h2>
<p><a href="https://lonestarelixir.com/2019/">This one</a> looks like a great conference and I will be attending. Talk to your leader &amp; let me know if you think you might like to come as well!</p>
<h2 id="elixir180and181released">Elixir 1.8.0 (And 1.8.1!) Released</h2>
<p>This release brings a number of small features and performance enhancements. One that I'm happy to see is improved support for dealing with time zones.</p>
<p><a href="https://github.com/elixir-lang/elixir/blob/v1.8/CHANGELOG.md">Changelog</a></p>
<h2 id="niftytrickforwithstatements">Nifty Trick for <code>with</code> Statements</h2>
<p>I've used this trick once or twice and thought it was pretty clever. Tyler Pachal went ahead and wrote a <a href="https://medium.com/@tylerpachal/using-tuple-wrapping-to-improve-with-expressions-in-elixir-f491b06265fa">nice article describing it</a>!</p>
<h2 id="othercoolarticles">Other Cool Articles</h2>
<ul>
<li><a href="https://itnext.io/hello-elixir-the-first-month-d24255860b">Podium reflects</a> on 2 years of being all-in on Elixir. Spoiler alert: they love it &amp; have no regrets.</li>
<li>Thomas Barrasso <a href="https://itnext.io/hello-elixir-the-first-month-d24255860b">reflects on his first month</a> of using Elixir.</li>
<li>Monterail has posted a <a href="https://www.monterail.com/blog/learning-elixir-tutorial-guide">short article</a> about how their team got up and going with Elixir, borrowing training methods from Plataformatec (Elixir creators) themselves.</li>
</ul>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[New Blog!]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>This new instance of the Ghost blogging platform will be the new home for all things Elixir at QL. I'd like to use it for meeting notes and other items that are worth sharing around.</p>
<p>Reach out to me if you'd like to get access to contribute!</p>
<!--kg-card-end: markdown-->]]></description><link>https://threadbox.net/new-blog/</link><guid isPermaLink="false">5c5882fc69c09a00019d5208</guid><dc:creator><![CDATA[Adam Bellinson]]></dc:creator><pubDate>Mon, 04 Feb 2019 15:46:25 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>This new instance of the Ghost blogging platform will be the new home for all things Elixir at QL. I'd like to use it for meeting notes and other items that are worth sharing around.</p>
<p>Reach out to me if you'd like to get access to contribute!</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Great Article About Using Elixir at Podium]]></title><description><![CDATA[<p>I found this article last night and I just have to share. It's about another company extolling their wins and efficiencies with Elixir.</p><ul><li>It’s really easy to pick up</li><li>It’s reliable</li><li>Everyone else’s docs make us sad now</li><li>The community is pretty great</li><li>It’s really fast</li></ul>]]></description><link>https://threadbox.net/great-article-about-using-elixir-at-podium/</link><guid isPermaLink="false">5c588d1ffeb95a00015bb4f3</guid><dc:creator><![CDATA[Adam Bellinson]]></dc:creator><pubDate>Fri, 25 Jan 2019 19:05:00 GMT</pubDate><media:content url="https://threadbox.net/content/images/2019/02/1_oY89zL3XK87P7nXIEbYJOw.png" medium="image"/><content:encoded><![CDATA[<img src="https://threadbox.net/content/images/2019/02/1_oY89zL3XK87P7nXIEbYJOw.png" alt="Great Article About Using Elixir at Podium"><p>I found this article last night and I just have to share. It's about another company extolling their wins and efficiencies with Elixir.</p><ul><li>It’s really easy to pick up</li><li>It’s reliable</li><li>Everyone else’s docs make us sad now</li><li>The community is pretty great</li><li>It’s really fast</li></ul><p>The most interesting point is how they've considered many of the most popular alternatives and after 2 years, they still assert that they have absolutely no remorse about going "all in" on Elixir.</p><p>First is the Reddit page because there are some good comments, then is the article in case you just want the direct link.</p><p><a href="https://www.reddit.com/r/elixir/comments/ajh9e0/two_years_of_elixir_at_podium_thoughts/" rel="noopener noreferrer">https://www.reddit.com/r/elixir/comments/ajh9e0/two_years_of_elixir_at_podium_thoughts/</a></p><p><a href="https://medium.com/podium-engineering/two-years-of-elixir-at-podium-thoughts-9f30defedb7d" rel="noopener noreferrer">https://medium.com/podium-engineering/two-years-of-elixir-at-podium-thoughts-9f30defedb7d</a></p><p>As always, I would love to hear your thoughts. What do you like best about Elixir? What are your reservations?</p>]]></content:encoded></item><item><title><![CDATA[Recommended podcast clip about FP]]></title><description><![CDATA[<p>I just wanted to share this <a href="http://elixirtalk.com/">ElixirTalk Podcast</a> clip (starting at 23 minutes) from the about thinking in the functional mindset.</p><p>The episode is <a href="https://soundcloud.com/elixirtalk/episode-108-managing-multiple-elixir-versions-how-much-erlang-should-you-know-and-thinking-functionally">available on Soundcloud</a>.</p><p>Some of the ideas:</p><ul><li>Being explicit. For clarity and all the other reasons.</li><li>Functional code is simple. No need to question what's "really"</li></ul>]]></description><link>https://threadbox.net/recommended-podcast-clip-about-fp/</link><guid isPermaLink="false">5c588c09feb95a00015bb4ec</guid><dc:creator><![CDATA[Adam Bellinson]]></dc:creator><pubDate>Thu, 24 Jan 2019 19:02:00 GMT</pubDate><content:encoded><![CDATA[<p>I just wanted to share this <a href="http://elixirtalk.com/">ElixirTalk Podcast</a> clip (starting at 23 minutes) from the about thinking in the functional mindset.</p><p>The episode is <a href="https://soundcloud.com/elixirtalk/episode-108-managing-multiple-elixir-versions-how-much-erlang-should-you-know-and-thinking-functionally">available on Soundcloud</a>.</p><p>Some of the ideas:</p><ul><li>Being explicit. For clarity and all the other reasons.</li><li>Functional code is simple. No need to question what's "really" going on behind the code.</li><li>Interesting opinion explained: Even if Desmond isn't leveraging the power of processes and concurrency, he'll still choose Elixir for most programming tasks.</li><li>JS and Scala both allow functionally type code, but because they allow references, the "hodge-podge" of 2 paradigms leads to trouble.</li><li>Refactoring is sooo easy with a bunch of stateless functions.</li><li>The functional approach is comfortable for modeling the real world. Also, things do happen at the same time in the real world, so modeling your program in a system and paradigm that naturally allows you to operate accordingly seems preferable.</li></ul><p>Actually, of the handful of elixir podcasts I'm following in general, this one is great. I'm catching up since I only found it recently, and the content seems top notch.</p>]]></content:encoded></item></channel></rss>