<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Scott Meade</title>
	<atom:link href="https://scottmeade.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://scottmeade.com</link>
	<description>Notes on productivity, business and software development.</description>
	<lastBuildDate>Thu, 02 Jan 2020 13:47:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='scottmeade.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>https://s0.wp.com/i/buttonw-com.png</url>
		<title>Scott Meade</title>
		<link>https://scottmeade.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="https://scottmeade.com/osd.xml" title="Scott Meade" />
	<atom:link rel='hub' href='https://scottmeade.com/?pushpress=hub'/>
	<item>
		<title>2019 Review</title>
		<link>https://scottmeade.com/2020/01/01/2019-review/</link>
		
		<dc:creator><![CDATA[smeade]]></dc:creator>
		<pubDate>Thu, 02 Jan 2020 00:55:55 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">http://scottmeade.com/?p=2128</guid>

					<description><![CDATA[Happy New Year! The Internet says this is the time of year to reflect and to plan. And I have. Listed here are not New Year’s resolutions nor 2020 goals but an inventory of what&#8217;s on my mind heading into the new year. Here is my 2019 annual review (h/t to the Full Focus Planner &#8230; <a href="https://scottmeade.com/2020/01/01/2019-review/" class="more-link">Continue reading <span class="screen-reader-text">2019 Review</span></a>]]></description>
										<content:encoded><![CDATA[
<p>Happy New Year! The Internet says this is the time of year to reflect and to plan. And I have. Listed here are not New Year’s resolutions nor 2020 goals but an inventory of what&#8217;s on my mind heading into the new year.</p>



<p>Here is my 2019 annual review (h/t to the <em>Full Focus Planner Quarterly Preview</em>.)</p>



<h4>What will you keep doing?</h4>



<p>In 2020, I will continue to&#8230;</p>



<ul><li>Use the Full Focus Planner (FFP) in 1Q 2020</li><li>Plan today’s tasks toward goals in FFP</li><li>Make time for family and friends</li><li>Move, stand and exercise daily</li><li>Go to the gym daily</li><li>Go to church</li><li>Take notes</li><li>Journal</li></ul>



<h4>What will you improve?</h4>



<p>In 2020, I will improve on the above by starting to&#8230;</p>



<ul><li>Limit FFP goals &amp; habits (more on goals vs. habits later) to 2 / quarter</li><li>Use <em>Things 3</em> for task management outside of my FFP daily big 3</li><li>Call Mom &amp; Dad more often </li><li>Track calories daily (healthy body’s made in the kitchen)</li><li>Add swimming to my gym workouts</li><li>Reading One-Year Bible daily</li><li>Review my notes weekly</li><li>Journal as part of ritual</li></ul>



<h4>What will you start doing?</h4>



<p>In 2020, I will start to&#8230;</p>



<ul><li>Create by blogging daily.</li><li>Focus on system and habits.</li><li>Look people in the eye when talking.</li><li>Spend at least an hour/day in CIO mode.</li><li>Consistently and proactively use time blocks.</li></ul>



<h4>What will you stop doing?</h4>



<p>In 2020, I will stop…</p>



<ul><li>consuming</li><li>being distracted</li><li>creating so many “goals” and deadlines</li><li>jumping immediately to coding solutions vs. managing</li></ul>



<p></p>
]]></content:encoded>
					
		
		
		
		<media:content url="https://2.gravatar.com/avatar/86510176fca94533818841c9be3db9e9?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">smeade</media:title>
		</media:content>
	</item>
		<item>
		<title>A Tiny Elixir Phoenix App</title>
		<link>https://scottmeade.com/2019/10/25/elixir-phoenix-001/</link>
		
		<dc:creator><![CDATA[smeade]]></dc:creator>
		<pubDate>Fri, 25 Oct 2019 16:05:06 +0000</pubDate>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[elixir]]></category>
		<category><![CDATA[phoenix]]></category>
		<guid isPermaLink="false">http://scottmeade.com/?p=2108</guid>

					<description><![CDATA[Did you know with two commands you can add a new feature to your Phoenix app? Phoenix code generators - also known as scaffolding - create a skeleton of code upon which your programming work can be performed.]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img data-attachment-id="2111" data-permalink="https://scottmeade.com/screen-shot-2019-10-25-at-9-09-43-am/" data-orig-file="https://scottmeade.files.wordpress.com/2019/10/screen-shot-2019-10-25-at-9.09.43-am.png" data-orig-size="1990,1854" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="screen-shot-2019-10-25-at-9.09.43-am" data-image-description="" data-image-caption="" data-medium-file="https://scottmeade.files.wordpress.com/2019/10/screen-shot-2019-10-25-at-9.09.43-am.png?w=300" data-large-file="https://scottmeade.files.wordpress.com/2019/10/screen-shot-2019-10-25-at-9.09.43-am.png?w=700" src="https://scottmeade.files.wordpress.com/2019/10/screen-shot-2019-10-25-at-9.09.43-am.png?w=1024" alt="" class="wp-image-2111" srcset="https://scottmeade.files.wordpress.com/2019/10/screen-shot-2019-10-25-at-9.09.43-am.png?w=1024 1024w, https://scottmeade.files.wordpress.com/2019/10/screen-shot-2019-10-25-at-9.09.43-am.png?w=150 150w, https://scottmeade.files.wordpress.com/2019/10/screen-shot-2019-10-25-at-9.09.43-am.png?w=300 300w, https://scottmeade.files.wordpress.com/2019/10/screen-shot-2019-10-25-at-9.09.43-am.png?w=768 768w, https://scottmeade.files.wordpress.com/2019/10/screen-shot-2019-10-25-at-9.09.43-am.png 1990w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p><strong>Did you know with two commands you can add a new feature to your Phoenix app? </strong>Phoenix code generators &#8211; also known as scaffolding &#8211; create a skeleton of code upon which your programming work can be performed.</p>



<p>In a previous <a href="https://scottmeade.com/elixir-phoenix-000/">article</a>, we installed Elixir Phoenix in our local development environment and created an empty Phoenix application. This article builds on that previous article, so if you do not yet have an empty Phoenix application running, see that article first. </p>



<p>In this article, we will add something useful to that application.</p>



<p><strong>HTML Generator</strong></p>



<p>The Phoenix generator that creates controller, views, and context for a web app is:</p>



<p class="has-background has-small-font-size has-background-light-background-color">mix phx.gen html&nbsp;</p>



<p>This generator is perfect for our html-based todo list and is fully documented <a href="https://hexdocs.pm/phoenix/Mix.Tasks.Phx.Gen.Html.html#content">here.</a> In a future article I will explain each of the items created with the scaffold in context of the Elixir Phoenix request and response cycle.</p>



<p>However, for now, I think it&#8217;s important &#8211; and fun &#8211; to get something running! Let&#8217;s do it!</p>



<p><strong>ToDos</strong></p>



<p>We would like each of our ToDos to have the following:</p>



<ul><li>a name</li><li>room for notes&nbsp;</li><li>a completion due date</li><li>a completion checkbox</li></ul>



<p>Each of these attributes can be sent into the html generator. In your console, go to the directory where your starter Phoenix app lives and type the following (<strong>bold</strong> lines are to be entered. Non-bold likes are the output from Phoenix as a result of entering the command.)</p>



<p class="has-background has-small-font-size has-background-light-background-color">$ <strong>mix phx.gen.html Todos Todo todos name:string notes:text due_date:date completed:boolean </strong><br>* creating lib/demo_web/controllers/todo_controller.ex<br>* creating lib/demo_web/templates/todo/edit.html.eex<br>&#8230;</p>



<p>Phoenix and Elixir in general is great at providing useful feedback in response to commands. In this case, the html generator tells us the next steps to run, so do those next steps now.</p>



<p class="has-background has-small-font-size has-background-light-background-color">Add the resource to your browser scope in lib/demo_web/router.ex:<br><br>&nbsp; &nbsp; resources &#8220;/todos&#8221;, TodoController</p>



<p>Your file lib/demo_web/router.ex should now look like <a href="https://github.com/smeade/phoenix_demos/blob/master/lib/demo_web/router.ex#L22">this</a>.</p>



<p>Run the database migrations which will update your database.</p>



<p class="has-background has-small-font-size has-background-light-background-color">$ <strong>mix ecto.migrate</strong><br>08:50:09.425 [info]&nbsp; == Running 20191025144448 Demo.Repo.Migrations.CreateTodos.change/0 forward<br>08:50:09.427 [info]&nbsp; create table todos<br>08:50:09.433 [info]&nbsp; == Migrated 20191025144448 in 0.0s</p>



<p><strong>Run the App!</strong></p>



<p>Start up your app with the following command.</p>



<p class="has-background has-small-font-size has-background-light-background-color">$ <strong>mix phx.server</strong></p>



<p> and see the todo list running in your browser at <a href="http://localhost:4000/todos">http://localhost:4000/todos</a>!</p>



<p>(Note the url for todos is <a href="http://localhost:4000/todos">http://localhost:4000/todos</a>. When starting up the Phoenix server, it will point you to the homepage of the app &#8211; <a href="http://localhost:4000/">http://localhost:4000/</a>. Add /todos to the end to reach the todos page.)</p>



<p>In a future article we’ll dive into the controller, views, and context files that this generator created. For now, create some todos in your new app including one to remember to check back here later for more details!</p>
]]></content:encoded>
					
		
		
		
		<media:content url="https://2.gravatar.com/avatar/86510176fca94533818841c9be3db9e9?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">smeade</media:title>
		</media:content>

		<media:content url="https://scottmeade.files.wordpress.com/2019/10/screen-shot-2019-10-25-at-9.09.43-am.png?w=1024" medium="image" />
	</item>
		<item>
		<title>How to Get Started with Elixir Phoenix</title>
		<link>https://scottmeade.com/2019/10/23/elixir-phoenix-000/</link>
		
		<dc:creator><![CDATA[smeade]]></dc:creator>
		<pubDate>Wed, 23 Oct 2019 16:41:06 +0000</pubDate>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[elixir]]></category>
		<category><![CDATA[phoenix]]></category>
		<guid isPermaLink="false">http://scottmeade.com/?p=2101</guid>

					<description><![CDATA[Treat this article as a quick-ref to getting started with Elixir Phoenix. ]]></description>
										<content:encoded><![CDATA[
<p>Treat this article as a quick-ref to getting started with Elixir Phoenix. The Phoenix docs and <a rel="noreferrer noopener" aria-label="guides (opens in a new tab)" href="https://hexdocs.pm/phoenix/overview.html" target="_blank">guides</a> are excellent as the Phoenix community treats documentation contributions as first-class contributions to the framework. Also the Phoenix books such as <a rel="noreferrer noopener" aria-label="Programming Phoenix 1.4 (opens in a new tab)" href="https://pragprog.com/book/phoenix14/programming-phoenix-1-4" target="_blank">Programming Phoenix 1.4</a> are a great way to learn the framework.&nbsp;I recommend reading the guides at least. </p>



<hr class="wp-block-separator" />



<p><strong>Prerequisites</strong></p>



<p>This article assumes you have some dependencies installed on your machine. Here is a useful list of references for getting each dependency installed.</p>



<p><strong>Database: PostgreSQL</strong></p>



<p>Most Phoenix projects as well as this series of articles will use the PostgreSQL database. Downloads and instructions for installing PostgreSQL are found on the <a rel="noreferrer noopener" aria-label="download (opens in a new tab)" href="https://www.postgresql.org/download/" target="_blank">download</a> page of the PostgreSQL project.</p>



<p><strong>JavaScript Runtime: Node.js</strong></p>



<p>Phoenix uses the Node.js JavaScript runtime.&nbsp; Downloads and instructions for installing Node.js are found on the project&#8217;s <a rel="noreferrer noopener" aria-label="downloads (opens in a new tab)" href="https://nodejs.org/en/download/" target="_blank">downloads</a> page.</p>



<p><strong>Language and Virtual Machine: Elixir and Erlang</strong></p>



<p>Phoenix is written in Elixir. Elixir compiles to the Erlang virtual machine.&nbsp;Installation instructions for Elixir (which will usually also install Erlang) are found on the <a rel="noreferrer noopener" aria-label="Installing Elixir (opens in a new tab)" href="https://elixir-lang.org/install.html" target="_blank">Installing Elixir</a> page of the Elixir language project. Follow the installation instructions using the installer for your environment.&nbsp;</p>



<p><strong>Finally, Phoenix!</strong></p>



<p>Install Phoenix like so:</p>



<p class="has-background has-small-font-size has-background-light-background-color">$ mix archive.install hex phx_new 1.4.10</p>



<p><strong>Checkpoint</strong></p>



<p>Before continuing forward, confirm that Phoenix and its dependencies are installed. &nbsp;</p>



<p>You should be able run the version flag (-v) like so:</p>



<p class="has-text-color has-background has-small-font-size has-foreground-dark-color has-background-light-background-color">$ mix phx.new -v</p>



<p>This should return the version of Phoenix currently installed.</p>



<p class="has-background has-small-font-size has-background-light-background-color">Phoenix v1.4.10</p>



<p>If you get any errors, exceptions or other messages, take a look through the <a rel="noreferrer noopener" aria-label="Phoenix installation guide (opens in a new tab)" href="https://elixir-lang.org/install.html" target="_blank">Phoenix installation guide</a> for additional instructions and troubleshooting tips. If you still have any questions or issues, feel free to <a href="https://twitter.com/smeade">reach out to me</a>!</p>



<hr class="wp-block-separator" />



<p><strong>Creating the Phoenix Application!</strong></p>



<p>Earlier, we used &#8220;mix&#8221; to install Phoenix as well as to create our Phoenix project. mix is Elixir’s command-line build tool which is used for almost all steps of creating and managing an Elixir project. We will use mix extensively throughout this series, including now. Let’s create our Phoenix app!&nbsp;</p>



<p>As this application will eventually demonstrate how to accomplish a wide variety of tasks in Phoenix and become our demo app, let’s name it Demo.</p>



<p><strong>Create with phx.new</strong></p>



<p>1. Create and/or move to a directory in your environment where you would like the project source code to live. It can be anywhere, for me it’s:</p>



<p class="has-background has-small-font-size has-background-light-background-color">MacBookPro:~ smeade$ cd Projects<br>/Users/smeade/Projects</p>



<p>2. From that directory, enter the phx.new mix command.</p>



<p class="has-background has-small-font-size has-background-light-background-color">$ mix phx.new demo<br>* creating demo/config/config.exs<br>&#8230;.<br>Fetch and install dependencies? [Yn] Y<br></p>



<p>3. When prompted to Fetch and install dependencies? [Yn], answer Y.</p>



<p>4. After the mix task completes, follow the next steps:</p>



<p class="has-background has-small-font-size has-background-light-background-color">$ cd demo</p>



<p>5. Configure your database in config/dev.exs and run:</p>



<p class="has-background has-background-light-background-color">$ mix ecto.create</p>



<p>Note: If you run ecto.create you might see this error:</p>



<p style="color:#a30015;" class="has-text-color has-small-font-size">** (Mix) The database for Demo.Repo couldn&#8217;t be created: ERROR 42501 (insufficient_privilege) permission denied to create database</p>



<p>When a phoenix project is first generated, the database configuration (in the file dev.exs) looks like this:</p>



<pre class="wp-block-preformatted"># found in dev.exs
#&nbsp;Configure&nbsp;your&nbsp;database
config&nbsp;:demo,&nbsp;Demo.Repo,
&nbsp;&nbsp;username:&nbsp;"postgres",
&nbsp;&nbsp;password:&nbsp;"postgres",
&nbsp;&nbsp;database:&nbsp;"demo_dev",
&nbsp;&nbsp;hostname:&nbsp;"localhost",
&nbsp;&nbsp;show_sensitive_data_on_connection_error:&nbsp;true,
&nbsp;&nbsp;pool_size:&nbsp;10</pre>



<p>If you do not have a PostgreSQL user of <strong>postgres</strong> with password <strong>postgres</strong>, you will need to change this configuration to credentials that are available on your local database environment. For example, I have a user “phx” with password “phx”, so I update my dev.exs file like so:</p>



<pre class="wp-block-preformatted"># found in dev.exs
#&nbsp;Configure&nbsp;your&nbsp;database
config&nbsp;:demo,&nbsp;Demo.Repo,
&nbsp;&nbsp;username:&nbsp;"phx",
&nbsp;&nbsp;password:&nbsp;"phx",
&nbsp;&nbsp;database:&nbsp;"demo_dev",
&nbsp;&nbsp;hostname:&nbsp;"localhost",
&nbsp;&nbsp;show_sensitive_data_on_connection_error:&nbsp;true,
&nbsp;&nbsp;pool_size:&nbsp;10</pre>



<p>6. Start your Phoenix app with:</p>



<p class="has-background has-small-font-size has-background-light-background-color">$ mix phx.server</p>



<p><strong>Open the App!</strong></p>



<p>Now you should be able to open your browser to <a href="http://localhost:4000">http://localhost:4000</a> and see the “Welcome to Phoenix!” screen!</p>



<p>I’m happy to help out if anything in this article is unclear or not working for you. Reach out to me at <a href="https://twitter.com/smeade">https://twitter.com/smeade</a></p>



<p>Thanks for reading. In a following article, we’ll create our first “Hello World!” page.</p>
]]></content:encoded>
					
		
		
		
		<media:content url="https://2.gravatar.com/avatar/86510176fca94533818841c9be3db9e9?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">smeade</media:title>
		</media:content>
	</item>
		<item>
		<title>Wellness</title>
		<link>https://scottmeade.com/2019/10/22/wellness/</link>
		
		<dc:creator><![CDATA[smeade]]></dc:creator>
		<pubDate>Tue, 22 Oct 2019 15:08:28 +0000</pubDate>
				<category><![CDATA[Tuesday]]></category>
		<category><![CDATA[wellness]]></category>
		<category><![CDATA[health]]></category>
		<guid isPermaLink="false">http://scottmeade.com/?p=2092</guid>

					<description><![CDATA[Follow the findings summarized in the article and you’ll have covered 80+% of what we humans should do to help keep ourselves well. ]]></description>
										<content:encoded><![CDATA[
<p>In his Outside online article <a rel="noreferrer noopener" aria-label="We've Reached Peak Wellness. Most of It Is Nonsense. (opens in a new tab)" href="https://www.outsideonline.com/2399826/wellness-industry-lies-what-really-works" target="_blank">We&#8217;ve Reached Peak Wellness. Most of It Is Nonsense.</a>, <a rel="noreferrer noopener" aria-label=" (opens in a new tab)" href="https://twitter.com/bstulberg" target="_blank">Brad Stulberg</a><strong> </strong>perfectly sums up the basics of wellness as supported by current research.&nbsp;</p>



<p>Looking at the six dimensions of wellbeing: physical, emotional, social, cognitive, spiritual, and environmental, Stulberg identifies a couple key points and behaviors for each which research shows can improve our health, well-being and lifespan. <strong>Follow the findings summarized in the article and you’ll have covered 80+% of what we humans should do to help keep ourselves well. </strong></p>



<hr class="wp-block-separator" />



<p>Having too many apps, tools, books, podcasts, videos, conferences, talks and processes leads to too much effort spent selecting tools, planning, procrastinating and pre-optimizing instead of doing. This is true for wellness and also most other areas of modern life including business, religion, learning, hobbies…</p>



<p>So yes, it is perhaps paradoxical to have copied quotes from the article into a checklist. However it is at least <strong>an actionable checklist</strong>. <strong>Here is a <a rel="noreferrer noopener" aria-label="printable pdf (opens in a new tab)" href="https://scottmeade.files.wordpress.com/2019/10/bradstulbergwellnessnotes.pdf" target="_blank">printable pdf</a> of actionable quotes from the article.&nbsp;</strong>Follow Stulberg’s research-backed advice and you’re on your way.</p>



<figure class="wp-block-image size-thumbnail"><img data-attachment-id="2095" data-permalink="https://scottmeade.com/thumbnail/" data-orig-file="https://scottmeade.files.wordpress.com/2019/10/thumbnail.png" data-orig-size="420,536" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="thumbnail" data-image-description="" data-image-caption="" data-medium-file="https://scottmeade.files.wordpress.com/2019/10/thumbnail.png?w=235" data-large-file="https://scottmeade.files.wordpress.com/2019/10/thumbnail.png?w=420" src="https://scottmeade.files.wordpress.com/2019/10/thumbnail.png?w=118" alt="Actionable and printable pdf of quotes from  “We've Reached Peak Wellness. Most of It Is Nonsense&quot;." class="wp-image-2095" srcset="https://scottmeade.files.wordpress.com/2019/10/thumbnail.png?w=118 118w, https://scottmeade.files.wordpress.com/2019/10/thumbnail.png?w=236 236w" sizes="(max-width: 118px) 100vw, 118px" /><figcaption><a href="https://scottmeade.files.wordpress.com/2019/10/bradstulbergwellnessnotes.pdf">https://scottmeade.files.wordpress.com/2019/10/bradstulbergwellnessnotes.pdf</a></figcaption></figure>



<p></p>
]]></content:encoded>
					
		
		
		
		<media:content url="https://2.gravatar.com/avatar/86510176fca94533818841c9be3db9e9?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">smeade</media:title>
		</media:content>

		<media:content url="https://scottmeade.files.wordpress.com/2019/10/thumbnail.png?w=118" medium="image">
			<media:title type="html">Actionable and printable pdf of quotes from  “We&#039;ve Reached Peak Wellness. Most of It Is Nonsense&#034;.</media:title>
		</media:content>
	</item>
		<item>
		<title>Reminders about Passion, Growth and Purpose from Performing Arts Academy</title>
		<link>https://scottmeade.com/2019/10/21/reminders-about-passion-growth-and-purpose-from-performing-arts-academy/</link>
		
		<dc:creator><![CDATA[smeade]]></dc:creator>
		<pubDate>Mon, 21 Oct 2019 16:30:00 +0000</pubDate>
				<category><![CDATA[Joy]]></category>
		<category><![CDATA[Life]]></category>
		<category><![CDATA[Monday]]></category>
		<category><![CDATA[growth]]></category>
		<category><![CDATA[leadership]]></category>
		<category><![CDATA[passion]]></category>
		<category><![CDATA[purpose]]></category>
		<guid isPermaLink="false">http://scottmeade.com/?p=2075</guid>

					<description><![CDATA[Educators and people that work daily with children and in servant-leadership roles understand and practice these observations almost innately. However those of us in tech, especially remote tech-workers, could use a reminder.]]></description>
										<content:encoded><![CDATA[
<p>This weekend we attended a fundraiser gala for <a href="https://paacolorado.org">Performing Arts Academy (PAA) </a>Colorado, a performing-arts non-profit focussed on creating community, building character, inspiring excellence while practicing inclusivity.  The PAA program has grown from 20+ students and 3 teachers in 2006 to 900+ students and 35 teachers in 2019. In the context of this growth, I was struck by a few observations around passion, leadership and purpose. </p>



<p>Educators and people that work daily with children and in servant-leadership roles understand and practice these observations almost innately. However those of us in tech, especially remote tech-workers, could use a reminder.</p>



<h4>Passion and Purpose</h4>



<p>The event space was filled with passion. Passion for PAA was evident in the students that spoke and performed, the parents of those students, the supporters and the staff including Production and Site Manager, Sam Leahy and the Executive Director, Dr. James Ramsey. However, the most palpable passion was not for performance of music or theater or arts. The most palpable passion was for the impact that PAA has had on individual people&#8217;s’ lives.&nbsp;</p>



<p>Dr. Ramsey used his time not to talk up the numbers or financials or growth rates, but to instead share a story of one child who was in a production being hosted at a school. This student was restless, lacked focus and had a difficult time keeping his hands to himself. The student did not seem to want to be in the production and acted as if he expected to be kicked out. </p>



<p>Upon speaking with the student’s mom, the staffed learned he did in fact very much want to be there and she asked if PAA could somehow help make it happen. Dr. Ramsey and his staff took the time to personally meet with the school staff and the mom. They learned more about the student’s background and desires, spoke with him to set expectations and found a place in the show that would work for him. Dr. Ramsey personally checked in with the student every rehearsal. The student was able to participate and gained a new sense of confidence and well-being. He simply needed to know that there were adults in his life that cared and listened and expected him to be able to excel.&nbsp;</p>



<p>The many hours and extra effort spent working with this one child had little to do with musicianship or acting skills. It had everything to do with listening and being noticed and setting expectations creating an impact much larger than arts instruction itself. Leaders often think primarily of their and their team&#8217;s technical skills, however a leader’s purpose is well beyond that.</p>



<p><strong>Dr. Ramsey and the staff of PAA have a <em>passion</em> for performance. However their <em>purpose</em> is to leverage that passion into positive impact beyond themselves.&nbsp;</strong></p>



<h4>Growth and Purpose</h4>



<p>That one kid didn’t directly matter when it came to the program&#8217;s growth. That one student&#8217;s experience was not going to result in X number of new students signing up the next season. Dr. Ramsey and Sam Leahy spent time with that one kid because of their sense of purpose. </p>



<p>The thing is though that the program has grown precisely because of they ways they work with students one at a time, where they are and with who they are. When students talk of PAA, they don’t talk about musicianship or artistry. They talk about confidence, friendships and intangibles that will be with them for a lifetime. <strong>The community&#8217;s desire for these intangibles is manifest in PAA&#8217;s growth.</strong></p>



<hr class="wp-block-separator" />



<p class="has-drop-cap">Considering one definition of purpose is a “<a href="https://www.outsideonline.com/2399826/wellness-industry-lies-what-really-works">sense of direction, core values, and connection with something beyond yourself</a>” here are some thoughts not often exhibited in the tech bubble.</p>



<ol><li>Growth with purpose takes time, sometimes years sometimes decades.</li><li>While leaders love dashboards and scoreboards, a fulfilled sense of purpose is not measurable. In our growth-for-growth’s sake industry it’s so easy &#8211; for the tech community especially &#8211; to turn everything into metrics, processes and A/B tests. This in itself is not bad. <strong>It becomes bad when we forget that a healthy definition of purpose includes a connection with something beyond yourself and is likely not measured by streaks, apps or likes.</strong></li><li>You may <em>be </em>a musician or a software developer or an executive leader, however that is not your purpose. Your purpose is what you <em>do </em>with your musicianship or your software development skills or your leadership experience.&nbsp;</li></ol>



<p>Metrics, processes and A/B tests can be useful for running a company and organizations do require positive cash-flow to remain in operation. However let’s not pretend that the metrics, processes and A/B testing that identify people as users or which rank them by their customer lifetime value have a purpose beyond profit. </p>



<p><strong>Sometimes it takes jumping out of the tech and startup bubble to be reminded of this more healthy vision of purpose.</strong></p>



<figure class="wp-block-image size-large"><img data-attachment-id="2079" data-permalink="https://scottmeade.com/2019/10/21/reminders-about-passion-growth-and-purpose-from-performing-arts-academy/road-128-2/" data-orig-file="https://scottmeade.files.wordpress.com/2019/10/road-128-1.png" data-orig-size="128,128" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Road-128" data-image-description="" data-image-caption="" data-medium-file="https://scottmeade.files.wordpress.com/2019/10/road-128-1.png?w=128" data-large-file="https://scottmeade.files.wordpress.com/2019/10/road-128-1.png?w=128" src="https://scottmeade.files.wordpress.com/2019/10/road-128-1.png?w=128" alt="" class="wp-image-2079" /></figure>



<p></p>
]]></content:encoded>
					
		
		
		
		<media:content url="https://2.gravatar.com/avatar/86510176fca94533818841c9be3db9e9?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">smeade</media:title>
		</media:content>

		<media:content url="https://scottmeade.files.wordpress.com/2019/10/road-128-1.png?w=128" medium="image" />
	</item>
		<item>
		<title>DockYard&#8217;s Phoenix Phrenzy</title>
		<link>https://scottmeade.com/2019/10/18/phoenix-phrenzy/</link>
					<comments>https://scottmeade.com/2019/10/18/phoenix-phrenzy/#respond</comments>
		
		<dc:creator><![CDATA[smeade]]></dc:creator>
		<pubDate>Fri, 18 Oct 2019 16:56:50 +0000</pubDate>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[elixir]]></category>
		<category><![CDATA[phoenix]]></category>
		<category><![CDATA[programming]]></category>
		<guid isPermaLink="false">http://scottmeade.com/?p=2041</guid>

					<description><![CDATA[To highlight the capabilities of  Phoenix LiveView, DockYard created and is running Phoenix Phrenzy, a contest for developers to build with Phoenix LiveView. ]]></description>
										<content:encoded><![CDATA[
<p class="has-drop-cap">To highlight the capabilities of  <strong><a href="https://github.com/phoenixframework/phoenix_live_view">Phoenix LiveView</a></strong>, DockYard created and is running <a href="https://phoenixphrenzy.com">Phoenix Phrenzy</a>, a contest for developers to build with Phoenix LiveView. The voting period ended on October 20, 2019.</p>



<p>Source code for each submission is currently publicly visible. This provides us a great opportunity to see the implementation details of deployed LiveView apps. The submissions can be clustered into a few categories.</p>



<p><strong>Games (18):</strong> Tetris Kachori, LiveView Tetris, Space Birds, Unox, crack the cregg, Archmagi, Phoenix Royale, Demon Spirit, Ground Control to Major Tom, Never lose Tic Tac Toe, Geo Racer, Answercast, Roll &amp; Music together, ETE, Pentomino Game, Live Chess, Live View Math, CodeBreaker!<br><strong>Data (4):</strong> Visualixir, Fprefs, SimpleBet MLB Pitch-By-Pitch Viz, Pie Chart Maker<br><strong>Business/Productivity (4):</strong> Elixcel, Pomodoro Timer, Kanban LIVE!,&nbsp;<br><strong>Writing and Drawing (4):</strong> Haiku Live, LiveDraw, TypoPaint, LiveView PixelArt Editor<br><strong>Utilities (4):</strong> gluster-dashboard, Elixir Console Live, Phoenix Commander, Elixir Regex<br><strong>Music (2): </strong>MIDI LiveView Demo, LiveTracker<br><strong>Other (2):</strong> Baby Age Calculator, Flame of Life</p>



<hr class="wp-block-separator has-text-color has-background has-foreground-dark-background-color has-foreground-dark-color is-style-default" />



<p class="has-drop-cap">Some of the submissions caught my attention. I’m certain the other entries also do a good job of highlighting the power of LiveView and are worthy of your time. Here are a few that happened to catch my eye.</p>



<h5 class="has-foreground-dark-color has-text-color"><strong>Elixcel</strong></h5>



<p>by <a href="https://github.com/joerichsen/">Jørgen Orehøj Erichsen</a><br><a href="https://elixcel.onrender.com" rel="nofollow">https://elixcel.onrender.com</a><br><a href="https://github.com/joerichsen/live_view_demo/tree/7e088ef25e9d95a87ae18bf3e3d7e696cdb42153">repo</a></p>



<p>This entry caught my eye with its simplicity and visual appeal that lets you easily understand what the app does with just a short gif. Elixcel is narrowly focussed on LiveView functionality (this <em>is</em> a LiveView contest afterall), yet I was impressed by its thoroughness. The author didn’t just stop at entering cell values and making basic calculations (though that would have been illustrative enough of the LiveView use case). Instead he added keyboard support for: arrow key navigation, bold/italics, cancel via esc, delete via backspace, etc. as well as add-row and add-column buttons in less than <a href="https://github.com/joerichsen/live_view_demo/blob/master/lib/live_view_demo_web/live/elixcel_live.ex">400 lines of code</a>.</p>



<p>Good job @joerichsen.</p>



<h5 class="has-foreground-dark-color has-text-color"><strong>CodeBreaker!</strong></h5>



<p>by <a href="https://github.com/aravindavk">Aravinda VK&nbsp;</a>  <br><a href="https://codebreaker.gigalixirapp.com" rel="nofollow">https://codebreaker.gigalixirapp.com</a><br><a href="https://github.com/stwf/live_view_demo/tree/49211964770d607b60d2cad137e4dbe0249aeb76">repo</a></p>



<p>LiveView templates can be rendered inline (via the ~L sigil) or they can be rendered via a separate .leex html template (<a href="https://hexdocs.pm/phoenix_live_view/Phoenix.LiveView.html">docs</a>). .leex templates can render and nest standard .eex templates (aka &#8220;partials&#8221;).</p>



<p>I think the .leex template is more familiar, approachable and maintainable for developers than the embedded approach so I looked through some of the entries to find some that use <a href="https://github.com/stwf/live_view_demo/blob/49211964770d607b60d2cad137e4dbe0249aeb76/lib/live_view_demo_web/templates/game/_game.html.leex">the .leex html template approach with nested templates</a>. CodeBreaker! is one of those.</p>



<p>Besides being a demonstration of .leex templates, it’s a fun game to play.</p>



<h5 class="has-foreground-dark-color has-text-color"><strong>Geo Racer</strong></h5>



<p>by a small mighty <a href="https://teamgaslight.com/">Gaslight</a> team<br><a href="https://georacer.io/" rel="nofollow">https://georacer.io/</a><br><a href="https://github.com/zkayser/georacer/tree/6a54ed21f3a9705da72fc92699a5932b1071f798">repo</a></p>



<p>On the other end of the complexity spectrum, GeoRacer is such an ambitious entry that it just had to have a mention. The scope of the effort is impressive. “The racing game helps you track down waypoints with an interactive hot/cold meter. But beware, your friends will gain hazards along the way that will make your race more difficult. Be the first to collect a courses&#8217;s waypoint and win the day!”</p>



<p>This project has a mix of standard controllers and views combined with live views. It goes well beyond LiveView functionality though. The GeoRacer team created Plugs and also uses Channels. It leverages :geo, :geocalc, and :geo_postgis for geo support. There’s an impressive amount of Elixir and Phoenix packed into this project in such a short timeframe. Theres lots beyond LiveView to dig into and learn from the <a href="https://github.com/zkayser/georacer/tree/6a54ed21f3a9705da72fc92699a5932b1071f798">GeoRacer repo.</a></p>



<hr class="wp-block-separator has-text-color has-background has-foreground-dark-background-color has-foreground-dark-color is-style-default" />



<h5 class="has-foreground-dark-color has-text-color"><strong>The Elixir Community</strong> and Ecosystem</h5>



<p class="has-drop-cap">The PhoenixPhrenzy contest highlights the friendly and supportive nature of the Elixir and Elixir Phoenix community. In tweets, participants talk about their work as fun and enjoyable. When promoting their submissions, app authors do so in a friendly way that is not ego-centric rather humble and encouraging of folks to look at not just their apps but also at the contest and entries in general.</p>



<p>Some of these projects also demonstrate the power of leveraging existing Elixir community packages. For example, Elixcel uses the <a href="https://github.com/narrowtux/abacus">Abacus</a> parser for mathematical expressions. Developers seem reluctant to use Elixir Phoenix because the ecosystem is not as mature as Ruby&#8217;s so the library of packages available is perceived as lacking. Let me assure you that is not the case. Whatever tasks you are working on as an Elixir developer, do not assume you have to write it from scratch. Instead, search <a href="https://hex.pm">hex</a> and you might be surprised.&nbsp;</p>



<h5 class="has-foreground-dark-color has-text-color"><strong>Go Take a Look and Vote!</strong></h5>



<p>In the time I spent reviewing entries and writing this, another 10+ votes have been cast! If you’re interested in Phoenix LiveView &#8211; or just want to see what some folks are building with Elixir and Phoenix, <a href="https://phoenixphrenzy.com/voting">go check it out</a> (requires sign in via GitHub).<br></p>
]]></content:encoded>
					
					<wfw:commentRss>https://scottmeade.com/2019/10/18/phoenix-phrenzy/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:content url="https://2.gravatar.com/avatar/86510176fca94533818841c9be3db9e9?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">smeade</media:title>
		</media:content>
	</item>
		<item>
		<title>Welcome</title>
		<link>https://scottmeade.com/2019/08/27/2021/</link>
					<comments>https://scottmeade.com/2019/08/27/2021/#respond</comments>
		
		<dc:creator><![CDATA[smeade]]></dc:creator>
		<pubDate>Tue, 27 Aug 2019 22:23:43 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">http://scottmeade.wordpress.com/?p=2021</guid>

					<description><![CDATA[I am the co-founder of Synap Software, an Elixir Phoenix and Ruby on Rails consultancy and software company. I am a Christian and church member, family man, certified diver, private pilot, hiker, reader, and productivity junky. I have a Masters of Applied Science in CS from the University of Denver and a business degree from Illinois Wesleyan University. I am @smeade on Twitter and am not on Facebook.]]></description>
										<content:encoded><![CDATA[
<p class="has-normal-font-size">I am the <a href="https://synapsoftware.com/">co-founder of Synap Software</a>, an <a href="https://phoenixframework.org/">Elixir Phoenix</a> and <a href="https://rubyonrails.org/">Ruby on Rails</a> consultancy and software company. I am a Christian and <a href="http://stlukeshr.com/">church member</a>, <a href="http://www.flickr.com/photos/7881612@N03/4931027925/in/set-72157624692561615/">family man,</a> <a href="http://www.flickr.com/photos/14656926@N04/4412608948/in/set-72157623568829484/">certified diver</a>, private pilot, <a href="http://www.flickr.com/photos/7881612@N03/3762289502/in/set-72157621858938336/">hiker</a>, reader, and <a href="https://scottmeade.wordpress.com/category/productivity/">productivity junky.</a> I have a <a href="http://www.du.edu/">Masters of Applied Science</a> in CS from the <a href="https://www.du.edu/">University of Denver</a> and a business degree from <a href="https://www.iwu.edu/">Illinois Wesleyan University</a>. I am <a href="https://twitter.com/smeade">@smeade</a> on Twitter and am not on Facebook.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://scottmeade.com/2019/08/27/2021/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:content url="https://2.gravatar.com/avatar/86510176fca94533818841c9be3db9e9?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">smeade</media:title>
		</media:content>
	</item>
		<item>
		<title>Focus</title>
		<link>https://scottmeade.com/2019/08/27/focus/</link>
					<comments>https://scottmeade.com/2019/08/27/focus/#respond</comments>
		
		<dc:creator><![CDATA[smeade]]></dc:creator>
		<pubDate>Tue, 27 Aug 2019 21:50:41 +0000</pubDate>
				<category><![CDATA[Focus]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Software]]></category>
		<guid isPermaLink="false">http://scottmeade.wordpress.com/?p=1998</guid>

					<description><![CDATA["There are two locales in a pitcher’s universe – on the mound and off the mound. When a pitcher is on the mound he should be thinking about only two things, …]]></description>
										<content:encoded><![CDATA[
<blockquote class="wp-block-quote"><p><strong>&#8220;There are two locales</strong>&nbsp;in a pitcher&#8217;s universe &#8211; on the mound and off the mound. When a pitcher is on the mound he [sic] should be thinking about only two things pitch selection and pitch location. If he finds himself thinking about something else, he should get off the mound.&#8221; </p><cite>Harvey Dorfman</cite></blockquote>



<hr class="wp-block-separator" />



<h4>And so it is with software writers.</h4>



<p>There are two locales in the software writer&#8217;s universe &#8211; in the code and outside the code. When a software writer is in the code they should be thinking about only two things, the line of code they are writing and the domain for which they are writing it. If they find themselves thinking of anything else, they should get out of the code. &#8211; sbm</p>
]]></content:encoded>
					
					<wfw:commentRss>https://scottmeade.com/2019/08/27/focus/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:thumbnail url="https://scottmeade.files.wordpress.com/2019/08/pexels-photo-2475108.jpeg" />
		<media:content url="https://scottmeade.files.wordpress.com/2019/08/pexels-photo-2475108.jpeg" medium="image">
			<media:title type="html">photo of pitcher throwing baseball</media:title>
		</media:content>

		<media:content url="https://2.gravatar.com/avatar/86510176fca94533818841c9be3db9e9?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">smeade</media:title>
		</media:content>
	</item>
		<item>
		<title>Three New Productivity Habits</title>
		<link>https://scottmeade.com/2017/04/02/productivity-notes-march/</link>
					<comments>https://scottmeade.com/2017/04/02/productivity-notes-march/#comments</comments>
		
		<dc:creator><![CDATA[smeade]]></dc:creator>
		<pubDate>Sun, 02 Apr 2017 13:34:53 +0000</pubDate>
				<category><![CDATA[Goals]]></category>
		<category><![CDATA[Productivity]]></category>
		<guid isPermaLink="false">http://scottmeade.wordpress.com/?p=1883</guid>

					<description><![CDATA[In March I formed three habits with the intention of improving productivity and mindfulness. These form a foundation for the building of new habits in April. In March, I: Avoided posting to Twitter and Facebook. Created a habit of ubiquitous capture. Created a process habit (inbox 0). Avoided posting to Twitter and Facebook Avoiding Twitter and Facebook posts &#8230; <a href="https://scottmeade.com/2017/04/02/productivity-notes-march/" class="more-link">Continue reading <span class="screen-reader-text">Three New Productivity&#160;Habits</span></a>]]></description>
										<content:encoded><![CDATA[<p><strong>In March I formed three habits</strong> with the intention of improving productivity and mindfulness. These form a foundation for the building of new habits in April.<span id="more-1883"></span></p>
<p>In March, I:</p>
<ul>
<li>Avoided posting to Twitter and Facebook.</li>
<li>Created a habit of ubiquitous capture.</li>
<li>Created a process habit (inbox 0).</li>
</ul>
<h4><strong>Avoided posting to Twitter and Facebook</strong></h4>
<p>Avoiding Twitter and Facebook posts was initially a way to reduce the number of knee-jerk reactionary postings I would make, mostly around politics. Like a lot of Americans, was (and am) frustrated. But the amount of venting I was doing was an indicator that I was granting my frustration too much space in my life.</p>
<p>I was in a cycle: get frustrated about something, immediately desire to vent about it. In order to vent about it; think about it even more to try to build somewhat cognizant thoughts around the topic. Then think about it even more after posting as people reply. In this one, one (sometimes trivial) frustration would become amplified and take up a non-trivial amount of my energy and time.</p>
<blockquote><p>Avoiding those outlets for frustration has broken the amplification cycle.</p></blockquote>
<p>Next I want to extend that benefit from an improved state of mind to improved productivity by <em>avoiding <strong>reading</strong> of social media and news</em>. More about that in the April planning post.</p>
<h4>Created a habit of ubiquitous capture</h4>
<p>I installed Wunderlist on my phone. Every todo or thought or task or plan, large or small, got captured in one &#8220;inbox&#8221; list. This list replaced at least three other methods I was using to try to keep track of what needs done. This ubiquitous capture habit replaced my email inboxes, scraps of paper and headspace.</p>
<p>If something needs to be done, I now feel confident that I can set it and forget it. If I have an idea or thought I now feel confident in immediately capturing it and knowing that I will get to it in time.</p>
<blockquote><p>Knowing that my long list of todos and ideas is in one place has set a foundation for becoming better organized and more productive.</p></blockquote>
<p>Next, I want to change my capture habit tools from phone to pencil/paper. More on that in a future post.</p>
<h4>Created a process habit</h4>
<p>Related to ubiquitous capture, I am now in the habit of processing my inboxes (online and physical) to zero. There&#8217;s much debate about the inbox zero approach. I won&#8217;t rehash it here. For me, it works. A long list of unread emails, a stack of un-processed physical mail, or a emails read but not acted upon all increase anxiety and act as roadblocks to getting big, productive work done.</p>
<p>Now with any &#8220;inbox&#8221; item I immediately either:</p>
<ul>
<li>delete it</li>
<li>delegate it</li>
<li>defer it</li>
<li>archive it</li>
</ul>
<blockquote><p>Knowing that todos and ideas have at least been initially processed has reduced anxiety and increased motivation.</p></blockquote>
<p>Next, I need to take advantage of my reduced anxiety and increased motivation to <em>improve <strong>execution</strong></em> &#8211; e.g. get stuff actually done. Again, more about next steps on this habit in the next post.</p>
<h4>Next steps in April</h4>
<p>The habits formed in March do little by themselves to make improve productivity. Instead, their purpose is to clear the plate and lay a foundation for increases in productivity. The freed up time and headspace along with reduced anxiety are necessary to build the habits that will improve productivity.</p>
<h4>TL;DR;</h4>
<p>In 31 days I created the habits of social media posting avoidance, ubiquitous capture, and inbox processing in order to clear the plate and build a foundation for new productivity habits over the next 30 days.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://scottmeade.com/2017/04/02/productivity-notes-march/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		
		<media:thumbnail url="https://scottmeade.files.wordpress.com/2017/04/img_2195.jpg" />
		<media:content url="https://scottmeade.files.wordpress.com/2017/04/img_2195.jpg" medium="image">
			<media:title type="html">IMG_2195</media:title>
		</media:content>

		<media:content url="https://2.gravatar.com/avatar/86510176fca94533818841c9be3db9e9?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">smeade</media:title>
		</media:content>
	</item>
		<item>
		<title>In Praise of Rails REST, MVC and Conventions</title>
		<link>https://scottmeade.com/2014/08/14/in-praise-of-rails-rest-mvc-and-conventions/</link>
					<comments>https://scottmeade.com/2014/08/14/in-praise-of-rails-rest-mvc-and-conventions/#respond</comments>
		
		<dc:creator><![CDATA[smeade]]></dc:creator>
		<pubDate>Thu, 14 Aug 2014 16:03:17 +0000</pubDate>
				<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Software]]></category>
		<guid isPermaLink="false">http://scottmeade.wordpress.com/?p=1853</guid>

					<description><![CDATA[There was a time where Rails conventions were more closely followed. Here is a gentle reminder of some of the well-known and accepted benefits of staying on the rails of convention.]]></description>
										<content:encoded><![CDATA[<p><strong>Guiding Principles</strong></p>
<p>I&#8217;ve been thinking about the &#8220;good old days&#8221; of Rails development. It seems there was a time where Rails conventions were more closely followed. Perhaps because the community was smaller. Perhaps because developers felt that the Rails conventions supported the smaller apps of the time.</p>
<p>Recalling these simpler days, I&#8217;d like to review the simplicity and power of the REST/CRUD combo by offering reminders of some of the well-known benefits of sticking with this convention.</p>
<p><span style="text-decoration:underline;">Stick with REST/CRUD</span></p>
<p>It&#8217;s not sexy. (You know what is sexy? Delivering quality code, quickly.)</p>
<p>Compared to alternatives, REST/CRUD is</p>
<p>* Easier to understand<br /> * Easier to maintain<br /> * Easier to test<br /> * Easier to API</p>
<p><span style="text-decoration:underline;">Easier to Understand</span></p>
<p>Remember that the future you or future developers will need to understand the application&#8217;s flow and logic. The greater number of custom methods or actions the application has, the harder the code is to understand and follow. Everyone knows what the create action does. Everyone knows where to go to find the code that creates an object. But when code is in a custom add_comment action, it becomes non-obvious where to find the code that creates said comment.</p>
<blockquote>
<p>DHH:<br /> Common problem I see in Rails code: Too few controllers. More controllers doing less work obviates need for many other fancy patterns. You can have many controllers all directing a single model but in different contexts. Less if/else, simpler views, simpler actions. <em>This becomes easier to do if you&#8217;re militant about only exposing REST CRUD from each controller.</em> Any deviation =&gt; new controller. <a href="https://twitter.com/dhh/status/453181241127620608" rel="nofollow">https://twitter.com/dhh/status/453181241127620608</a></p>
</blockquote>
<p>As a side note, a reminder to keep controllers thin.</p>
<p>When code is in controllers the code tends to get very complex, very quickly. Most domain logic should be in models or modules. This reduces the number of &#8220;paths&#8221; through the application, reduces the number of interface points between the client and server, and reduces the number of places where code must be maintained and troubleshooting occur.</p>
<p><span style="text-decoration:underline;">Easier to Maintain</span></p>
<p>When building Ruby on Rails, MVC, database-backed, web-apps, use the power of Ruby objects, ActiveRecord, and friends. When you think that ActiveRecord will not be up to the task for your special case; give it a try anyway. You will be surprised at AR&#8217;s performance and at the speed at which you can develop.</p>
<p><span style="text-decoration:underline;">Easier to Test</span></p>
<p>The more that code follows convention and uses Rails as-is, out-of-the-box; the fewer tests need written. Remember: &#8220;don&#8217;t test the framework&#8221;. You could end up with entire controllers and even small models which require no or very minimal tests.</p>
<p><span style="text-decoration:underline;">Easier to Expose an API</span></p>
<p>Rails gives applications a REST API basically for free.</p>
<p><span style="text-decoration:underline;">In general: Be Thoughtful in Design</span></p>
<blockquote>
<p>Programmers who know nothing about object-orientated design can be very successful in Ruby. However, successful but _undesigned_ applications carry the seeds of their own destruction; they are easy to write but gradually become impossible to change.</p>
<p>&#8211; Sandi Metz , &#8220;Practical Object-Oriented Design in Ruby&#8221;</p>
</blockquote>
<p>Be vigilant, thoughtful, purposeful in design. Stick to convention and may that day when your application becomes impossible to change never come.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://scottmeade.com/2014/08/14/in-praise-of-rails-rest-mvc-and-conventions/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:thumbnail url="https://scottmeade.files.wordpress.com/2012/10/img_6344.jpg" />
		<media:content url="https://scottmeade.files.wordpress.com/2012/10/img_6344.jpg" medium="image">
			<media:title type="html">IMG_6344</media:title>
		</media:content>

		<media:content url="https://2.gravatar.com/avatar/86510176fca94533818841c9be3db9e9?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">smeade</media:title>
		</media:content>
	</item>
	</channel>
</rss>
