<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">
 
 <title>Demian Neidetcher</title>
 
 <link href="http:neidetcher.com" />
 <updated>2013-05-14T08:26:16-05:00</updated>
 <id>http:neidetcher.com</id>
 <author>
   <name>Demian Neidetcher</name>
   <email>demian0311@gmail.com</email>
 </author>

 
 <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/neidetcher" /><feedburner:info uri="neidetcher" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry>
   <title>Book Review Functional Programming For Java Developers</title>
   <link href="http://feedproxy.google.com/~r/neidetcher/~3/AraOZCGYOPk/book-review-functional-programming-for-java-developers" />
   <updated>2013-05-14T00:00:00-05:00</updated>
   <id>http:neidetcher.com/programming/2013/05/14/book-review-functional-programming-for-java-developers</id>
   <content type="html">&lt;p&gt;First off, this is a small book. 72 pages including a glossary. I was able to read it on a plne ride from Louisiana to Denver. Like the tagline says, I hope I never need this book.&lt;/p&gt;

&lt;p&gt;As the title suggests, the book is about making Java more functional. On my team we spend half our time in Groovy and half on Scala. I suppose we have done similar things in Groovy. The support that Groovy has for closures makes it easier than it would have been in Java.&lt;/p&gt;

&lt;p&gt;He also covers what is coming in Java for more FP features like closures. The syntax looks clunky but I could see living with it if I had no choice.&lt;/p&gt;

&lt;p&gt;I found the book useful in reviewing and appreciating where I&amp;#8217;m at. How things were in Java and how nice things are in Scala. Even if you don&amp;#8217;t need to do functional programming in Java right now I think this book is a good read. If my current gig fell apart and I had to do Java fulltime then I would grab this book to keep my sanity.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/neidetcher/~4/AraOZCGYOPk" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http:neidetcher.com/programming/2013/05/14/book-review-functional-programming-for-java-developers</feedburner:origLink></entry>
 
 <entry>
   <title>April 2013 Month In Review</title>
   <link href="http://feedproxy.google.com/~r/neidetcher/~3/H8rIrC35J8Q/april-2013-month-in-review" />
   <updated>2013-04-27T00:00:00-05:00</updated>
   <id>http:neidetcher.com/fitness/2013/04/27/april-2013-month-in-review</id>
   <content type="html">&lt;h2 id='home_gym'&gt;Home Gym&lt;/h2&gt;

&lt;p&gt;It all started with some bro leisurely doing super-sets that included chain curls in the only available squat rack that uses standard weights (non metric). It was my squat day, oh man. I lifted at Red&amp;#8217;s for a year and it&amp;#8217;s alright, but their equipment setup is goofy. No wonder they have so many machines as opposed to barbells and plates; no one puts anything away at Red&amp;#8217;s.&lt;/p&gt;

&lt;p&gt;So I started to put together a home gym. I have a horrible barbell that I got for free. I have a set of hi-temp bumper plates (recycled tires) from Rogue and a bench and squat stand from Valor. I got some small standard weights for Ryder&amp;#8217;s birthday this year. Those are good for shoulder dumbell work. Also I had a few kettlebellls. I&amp;#8217;m able to get in everything I need with this equipment, it&amp;#8217;s awesome.&lt;/p&gt;

&lt;p&gt;Workouts are going great. The weather in Louisiana is awesome this time of year we&amp;#8217;ll see how it is when it gets very hot this summer and when it gets chilly in the following winter. What&amp;#8217;s especially cool is on week 4 of 5/3/1 where you&amp;#8217;re de-loading. I don&amp;#8217;t have to drive 15 minutes each way to the gym just to kind of go through the motions and not push myself too hard.&lt;/p&gt;
&lt;a href='http://www.flickr.com/photos/neidetcher/8655404670/' title='Home gym by neidetcher, on Flickr'&gt;&lt;img alt='Home gym' height='375' src='https://farm9.staticflickr.com/8256/8655404670_4289e7d99a.jpg' width='500' /&gt;&lt;/a&gt;
&lt;h2 id='too_aggressive'&gt;Too Aggressive&lt;/h2&gt;

&lt;p&gt;With 5/3/1 you&amp;#8217;re supposed to up your upper body lifts by 5 lbs and lower body lifts by 10 lbs every month. For April I decided to up my deadlift by 15 lbs and my press by 10 lbs. For those exercises I was hitting 10 reps for week 3 of 5/3/1 regularly and I thought I should bump it up more quickly.&lt;/p&gt;

&lt;h3 id='april_numbers'&gt;April numbers&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;pres: 170x6 (197 C1RM)&lt;/li&gt;

&lt;li&gt;deadlift: 330x3 (349 C1RM)&lt;/li&gt;

&lt;li&gt;bench: 270x5 (304 C1RM)&lt;/li&gt;

&lt;li&gt;squat: 270x3 (286 C1RM)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id='squat'&gt;Squat&lt;/h2&gt;

&lt;p&gt;I still get video of my squat and put it online, especially on the 5/3/1 week. I really want to keep myself honest here. This shot is kind of low, off of my bench but I can see my thigh make a brief appearance above my hip crease so I think I&amp;#8217;m in good shape.&lt;/p&gt;
&lt;iframe frameborder='0' height='315' src='http://www.youtube.com/embed/jmFrvlQz5Ik' width='420' /&gt;&lt;img src="http://feeds.feedburner.com/~r/neidetcher/~4/H8rIrC35J8Q" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http:neidetcher.com/fitness/2013/04/27/april-2013-month-in-review</feedburner:origLink></entry>
 
 <entry>
   <title>In Praise Of The Full Time Employee</title>
   <link href="http://feedproxy.google.com/~r/neidetcher/~3/dzm501aLPN0/in-praise-of-the-full-time-employee" />
   <updated>2013-03-17T00:00:00-05:00</updated>
   <id>http:neidetcher.com/programming/2013/03/17/in-praise-of-the-full-time-employee</id>
   <content type="html">&lt;p&gt;As software engineeers we have to turn our attention to thought leaders. These might be consultants, blog authors, book authors, speakers, software authors. Usually they have short engagements with companies. Their skills run deep into their chosen technologies.&lt;/p&gt;

&lt;p&gt;I think it&amp;#8217;s right for us to look up to these guys and to use them as resources. But I also think we tend to overlook the FTE of the software world. Their careers might not be as sexy, they might not work with the latest technologies but they deserve some recognition.&lt;/p&gt;

&lt;p&gt;From the outset here I gotta say this is self serving. I&amp;#8217;m a working stiff FTE. I&amp;#8217;ve thought about contracting a few times in my career but I always found a reason to chicken out. So this is in no way a condemnation of consultants that specialize in specific technology for short term engagements.&lt;/p&gt;

&lt;p&gt;What&amp;#8217;s more, I consider many of those very guys friends, occasional drinking buddies and dare I say mentors. Scott Davis, Tim Berglund, Matthew McCullough.&lt;/p&gt;

&lt;h2 id='intellectual_property'&gt;Intellectual Property&lt;/h2&gt;

&lt;p&gt;When companies talk about their intellectual property they probably don&amp;#8217;t think of their software engineers. I think this is a mistake. In many aspects of the business no one knows how things get done like software engineers. No one knows the algorithms, where the data comes from and who the data goes to like the software engineers. If you run a business, your software engineers that are full time employees are your intellectual property.&lt;/p&gt;

&lt;h2 id='fixing_the_disfunction'&gt;Fixing the Disfunction&lt;/h2&gt;

&lt;p&gt;Full time employees know that just as they are going to have to live in a code base they are also going to have to live in an organizational chart. They care more about hiring the right team members. They care about pulling other team members up. They also care about establishing long-term relationships within the organization that benefit the company.&lt;/p&gt;

&lt;h2 id='sleeping_in_your_own_house'&gt;Sleeping in Your Own House&lt;/h2&gt;

&lt;p&gt;If you&amp;#8217;ve had a career of living with your own software, design, architecture and coding decisions then you go about these decisions differently. By &amp;#8216;living with&amp;#8217; I mean that you are present for the inception of a project, the initial development and you are around to support the software for a few years. If you&amp;#8217;ve done that a few times in your career I think you get an appreciation for the impact of decisions.&lt;/p&gt;

&lt;h2 id='summary'&gt;Summary&lt;/h2&gt;

&lt;p&gt;I hate to take the steam out of my argument but I have to say that in each one of these areas I&amp;#8217;ve seen short-term contractors have a positive effect.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/neidetcher/~4/dzm501aLPN0" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http:neidetcher.com/programming/2013/03/17/in-praise-of-the-full-time-employee</feedburner:origLink></entry>
 
 <entry>
   <title>Smoke Tests For Your System</title>
   <link href="http://feedproxy.google.com/~r/neidetcher/~3/bGxObK9ccVg/smoke-tests-for-your-system" />
   <updated>2013-02-24T00:00:00-06:00</updated>
   <id>http:neidetcher.com/programming/2013/02/24/smoke-tests-for-your-system</id>
   <content type="html">&lt;p&gt;Me and another team member took our most recent lab week to do something incredibly un-sexy. Our resumes have no new libraries, buzz-words or languages that we can add. We decided to use some old-school tools to create a very tactical set of smoke tests for our system and for the back-end systems that we depend on.&lt;/p&gt;

&lt;p&gt;&lt;a href='http://www.flickr.com/photos/neidetcher/8546486548/'&gt;&lt;img alt='smoke_test_console' src='https://farm9.staticflickr.com/8378/8546486548_66de3d31dc.jpg' /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Our system is used by many clients. When we get requests we then turn around and talk to about 20 different back-end systems. Many times we are caught in the middle when there are anomalies found by our clients. When this happens we have to turn to the logs to see if there&amp;#8217;s a problem with a system we depend on. We also didn&amp;#8217;t have much visibility when our systems were not acting as they should. The principle is this. Create a shell script that will run a bunch of other shell scripts in a directory. If the script sends back an exit status that is bad (other than 1) we will consider that test failed. The runner has a simple check for that and will echo PASS/ FAIL based on what we get back. We also color the text green or red based on the results. 3/4 of my career has been about making red things green.&lt;/p&gt;

&lt;p&gt;&lt;a href='http://www.flickr.com/photos/neidetcher/8546486586/'&gt;&lt;img alt='smoke_test_html' src='https://farm9.staticflickr.com/8531/8546486586_752877ecc9.jpg' /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The output is so simple that my wife looked at a screen with a bunch of red and said, &amp;#8220;that doesn&amp;#8217;t look good.&amp;#8221; I&amp;#8217;m not sure if we&amp;#8217;ll opensource it, there isn&amp;#8217;t much intellectual property to speak of. We decided to set up the scripts to run in a cron job once an hour and generate an HTML report showing the same type of data.&lt;/p&gt;

&lt;p&gt;We set a low bar on the smoke tests, sometimes they use cURL to POST a SOAP request and we just look at the response to see a specific piece of information is present. Sometimes we just use NMAP to convince us that the port is warm on the far end and NMAP at least thinks it&amp;#8217;s the right type of application. The idea is that these tests should be written in 5 minutes.&lt;/p&gt;

&lt;p&gt;We&amp;#8217;re not sure how these will be used. We hope that folks that support operations (including developers) will see new problems that come up not only as an opportunity to diagnose the matter at hand but to also add another smoke test that will give us a more clear indication of the problem the next time around.&lt;/p&gt;

&lt;p&gt;This was an incredibly tactical bit of software that won&amp;#8217;t win us any design awards but it has already paid off a handful of times. I regret that we didn&amp;#8217;t put something together like this sooner.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/neidetcher/~4/bGxObK9ccVg" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http:neidetcher.com/programming/2013/02/24/smoke-tests-for-your-system</feedburner:origLink></entry>
 
 <entry>
   <title>Maven3 Maven2 Mixup On Mac</title>
   <link href="http://feedproxy.google.com/~r/neidetcher/~3/tiHlT9KAkJc/maven3-maven2-mixup-on-mac" />
   <updated>2013-01-05T00:00:00-06:00</updated>
   <id>http:neidetcher.com/programming/2013/01/05/maven3-maven2-mixup-on-mac</id>
   <content type="html">&lt;p&gt;At first my Mac was all:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;  ~/opt/maven/bin&amp;gt;mvn --version  
  Exception in thread &amp;quot;main&amp;quot; java.lang.NoClassDefFoundError: org/codehaus/plexus/classworlds/launcher/Launcher  
  Caused by: java.lang.ClassNotFoundException: org.codehaus.plexus.classworlds.launcher.Launcher  
  at java.net.URLClassLoader$1.run(URLClassLoader.java:202)  
  at java.security.AccessController.doPrivileged(Native Method)  
  at java.net.URLClassLoader.findClass(URLClassLoader.java:190)  
  at java.lang.ClassLoader.loadClass(ClassLoader.java:306)  
  at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)  
  at java.lang.ClassLoader.loadClass(ClassLoader.java:247)&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;And then I&amp;#8217;m like (in my ~/.bashrc)&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;  export M3_HOME=$OPT/maven  
  export M2\_HOME=$M3\_HOME  
  export PATH=$M3_HOME/bin:$PATH&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;So now it&amp;#8217;s all:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;  ~/opt/maven/bin&amp;gt;./mvn --version  
  Apache Maven 3.0.4 (r1232337; 2012-01-17 02:44:56-0600)  
  Maven home: /Users/demian/opt/maven  
  Java version: 1.6.0_37, vendor: Apple Inc.  
  Java home: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home  
  Default locale: en_US, platform encoding: MacRoman  
  OS name: &amp;quot;mac os x&amp;quot;, version: &amp;quot;10.8.2&amp;quot;, arch: &amp;quot;x86_64&amp;quot;, family: &amp;quot;mac&amp;quot;  &lt;/code&gt;&lt;/pre&gt;&lt;img src="http://feeds.feedburner.com/~r/neidetcher/~4/tiHlT9KAkJc" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http:neidetcher.com/programming/2013/01/05/maven3-maven2-mixup-on-mac</feedburner:origLink></entry>
 
 <entry>
   <title>Java Jdk 1.7 On Mac 1.8.2</title>
   <link href="http://feedproxy.google.com/~r/neidetcher/~3/tO0haojCp-4/java-JDK-1.7-on-mac-1.8.2" />
   <updated>2012-12-14T00:00:00-06:00</updated>
   <id>http:neidetcher.com/programming/2012/12/14/java-JDK-1.7-on-mac-1.8.2</id>
   <content type="html">&lt;p&gt;I have been doing Scala and Groovy at the day job for about a year now. For some side work I thought I&amp;#8217;http://neidetcher.blogspot.comd use Java, there obviously aren&amp;#8217;http://neidetcher.blogspot.comt enough semi-colons in my life. I haven&amp;#8217;http://neidetcher.blogspot.comt touched 1.7 yet and setting it up on my Mac wasn&amp;#8217;http://neidetcher.blogspot.comt incredibly intuitive.&lt;/p&gt;

&lt;p&gt;I had to do more poking around to arrive at this than I wish I had to.&lt;/p&gt;

&lt;p&gt;Finding the actual download from Oracle is easy.&lt;/p&gt;

&lt;p&gt;After installing Java 1.7 from Oracle I added this to my ~/.bashrc to actually use it. Not sure if the install should&amp;#8217;http://neidetcher.blogspot.comve done this or if I missed some steps I was supposed to take.&lt;/p&gt;

&lt;p&gt;export JRE_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_10.jdk/Contents/Home/&lt;br /&gt; export JAVA_HOME=$JRE_HOME&lt;br /&gt; export JDK_HOME=$JRE_HOME&lt;br /&gt; export PATH=$JAVA_HOME/bin:$PATH&lt;/p&gt;

&lt;p&gt;And holy cow Oracle does not make it easy to find out how to download the JDK 1.7 API documentation. Got to have it local for coding on an airplane.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/neidetcher/~4/tO0haojCp-4" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http:neidetcher.com/programming/2012/12/14/java-JDK-1.7-on-mac-1.8.2</feedburner:origLink></entry>
 
 <entry>
   <title>Another Look At Play2</title>
   <link href="http://feedproxy.google.com/~r/neidetcher/~3/RppZFvFVEhI/another-look-at-play2" />
   <updated>2012-11-19T00:00:00-06:00</updated>
   <id>http:neidetcher.com/programming/2012/11/19/another-look-at-play2</id>
   <content type="html">&lt;h1 id='neidetcher_another_look_at_play2'&gt;Neidetcher: Another Look at Play2&lt;/h1&gt;

&lt;p&gt;&lt;a href='http://www.playframework.org/assets/images/logos/normal.png'&gt;&lt;img alt='' src='http://www.playframework.org/assets/images/logos/normal.png' /&gt;&lt;/a&gt;&lt;a href='http://raibledesigns.com/rd/search?q=play'&gt;Matt Raible has some good writeups on Play2&lt;/a&gt;. We switched to Scala about a year ago. For lab week, a few of us evaluated Play earlier this year. At the time I mostly worked with the persistence layer, &lt;a href='https://github.com/playframework/Play20/wiki/ScalaAnorm'&gt;anorm&lt;/a&gt;. Our conclusion was that it wasn&amp;#8217;t quite ready for what we wanted to do. Just recently I finished a lab week and decided to take another look at Play. Here are some conclusions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Overall&lt;/strong&gt;&lt;br /&gt;The big question is, compared to what. At work we use Grails on the web side and Scala on the back-end. The reality is that we leverage front-end engineers to help us make Time Warner Cable web sites look and behave well. In our situation I don&amp;#8217;t think I can recommend it. But if you&amp;#8217;re in a hardcore Scala shop and your Scala engineers can do enough of the front-end work then Play might be a good option.&lt;/p&gt;

&lt;p&gt;Working with routes and templates felt a lot like Android development. You work in a non-code DSL to create your routes and that turns into code that you write against. Same for templates, they just turn into functions. sbt run fires up their own netty server, it&amp;#8217;s solid. It does a great job picking up changes. I didn&amp;#8217;t restart the play development server for a few days and it didn&amp;#8217;t miss anything. Play also gives you helpful error messages in the browser when there are problems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Routes&lt;/strong&gt;&lt;br /&gt;They&amp;#8217;re handled in a text file. I guess it&amp;#8217;s good because there&amp;#8217;s no cruft surrounding the definition of your routes. It&amp;#8217;s bad because I think Scala is the perfect language for defining an internal DSL to handle routes. It&amp;#8217;d be great to have IDE support while working with routes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Controllers&lt;/strong&gt;&lt;br /&gt;Everything feels very idiomatic to Scala. For example optional parameters are (drum-roll) Options. Play doesn&amp;#8217;t have you use servlet filters, you just wrap functions. The controllers themselves are not easy to test but there are workarounds such that you can do good unit tests.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Templating&lt;/strong&gt;&lt;br /&gt;It&amp;#8217;s familiar to someone used to Scala. Templates are just functions and have input parameters with types. This gets statically checked and your IDE will bark at you if you send the wrong data type into a template. I think that&amp;#8217;s awesome. The templating is not as rich as Groovy Server Pages. For the actual templating work there is no good IDE support. It&amp;#8217;d be great if TypeSafe took this on. The templating that Play gives you would be painful for front-end engineers that are only familiar with HTML, CSS and JavaScript.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Testing&lt;/strong&gt;&lt;br /&gt;They have utilities to help with testing. All the examples use Specs, I haven&amp;#8217;t got the Specs memo yet, still using jUnit (get off my porch). The biggest problem is that the controllers are objects so it&amp;#8217;s hard to do good unit testing. I found a workaround that someone suggested. Basically your controller is a class, in this case taking a dependency via the constructor. Then the object that you tell Play about in the routes extends that class. This seems to work in my toy example.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;object MockUp extends controllers.MockUp(new ProductionGuidCryptoServiceProvider()) {}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;span /&gt;: http://www.playframework.org/assets/images/logos/normal.png&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/neidetcher/~4/RppZFvFVEhI" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http:neidetcher.com/programming/2012/11/19/another-look-at-play2</feedburner:origLink></entry>
 
 <entry>
   <title>The Setup</title>
   <link href="http://feedproxy.google.com/~r/neidetcher/~3/uHpkIsRQ0mo/the-setup" />
   <updated>2012-11-16T00:00:00-06:00</updated>
   <id>http:neidetcher.com/efficiency/2012/11/16/the-setup</id>
   <content type="html">&lt;h1 id='neidetcher_the_setup'&gt;Neidetcher: The Setup&lt;/h1&gt;

&lt;p&gt;One of my favorite blogs is &lt;a href='http://usesthis.com/'&gt;The Setup&lt;/a&gt;. They feature various people that use computers in one way or another to do their job and simply ask them what their setup is. Well since they haven&amp;#8217;t asked me what my setup is yet (not realizing that I&amp;#8217;m kind of a big deal) I&amp;#8217;m going to just post this on my own.&lt;/p&gt;

&lt;h3 id='id17'&gt;#&lt;/h3&gt;

&lt;h4 id='who_are_you_and_what_do_you_do_im_a_software_engineer_i_have_worked_mostly_for_telecommunications_companies'&gt;Who are you, and what do you do? I&amp;#8217;m a software engineer. I have worked mostly for telecommunications companies.&lt;/h4&gt;

&lt;p&gt;The most challenging job I had was leading up a small but capable development team responsible for routing phone calls, including geo-spatial 911 traffic. This was at a startup without much support.&lt;/p&gt;

&lt;p&gt;Now I&amp;#8217;m a Senior Engineer at Time Warner Cable. My home office is in Denver, Colorado but I work remote in Lafayette, Louisiana. I fly back about once a month. The team I&amp;#8217;m on works on the services that IP devices use to get streaming television content.&lt;/p&gt;

&lt;h3 id='id18'&gt;#&lt;/h3&gt;

&lt;h4 id='what_hardware_do_you_use_my_main_computer_is_a_macbookpro_15_from_2010_i_also_have_a_macpro_desktop_each_computer_has_a_27_thunderbolt_display_i_was_skeptical_at_first_but_the_apple_magic_mouse_is_an_amazing_piece_of_equipment_i_use_1_standard_keyboard_for_the_desktop_but_primarily_i_use_the_bluetooth_keyboard_i_wouldnt_mind_having_the_bigger_size_but_the_travel_from_home_keys_to_the_mouse_seems_like_an_eternity_compared_to_the_bluetooth_keyboard'&gt;What hardware do you use? My main computer is a MacBookPro 15&amp;#8221; from 2010. I also have a MacPro Desktop. Each computer has a 27&amp;#8221; Thunderbolt Display. I was skeptical at first but the Apple Magic Mouse is an amazing piece of equipment. I use 1 standard keyboard for the desktop but primarily I use the bluetooth keyboard. I wouldn&amp;#8217;t mind having the bigger size but the travel from home keys to the mouse seems like an eternity compared to the bluetooth keyboard.&lt;/h4&gt;

&lt;p&gt;I also have an iPad 2 for work. I use it to validate software releases, cable channel updates. I also have an Asus Transformer to do the same thing on the Android platform. I don&amp;#8217;t write the client code but the team I&amp;#8217;m on is responsible for many of the back end services that these devices talk to.&lt;/p&gt;

&lt;p&gt;My phone is an LG P999 Android phone. Works great, has all the apps I need; Evernote, Pandora, Dropbox, Google Reader.&lt;/p&gt;

&lt;h3 id='id19'&gt;#&lt;/h3&gt;

&lt;h4 id='and_what_software_i_run_macos_on_both_machines_the_laptop_is_106_the_desktop_is_107_i_hear_so_much_griping_about_upgrading_the_os_that_i_dont_mind_waiting_a_while_until_the_kinks_get_worked_out_before_going_to_the_mac_a_few_years_ago_i_was_strictly_a_linux_user_it_has_been_a_smooth_transition_to_the_mac_i_still_feel_comfortable_whenever_i_go_back_to_linux_if_apple_gets_too_stupid_ill_probably_switch_back'&gt;And what software? I run MacOS on both machines. The laptop is 10.6, the desktop is 10.7. I hear so much griping about upgrading the OS that I don&amp;#8217;t mind waiting a while until the kinks get worked out. Before going to the Mac a few years ago I was strictly a Linux user. It has been a smooth transition to the Mac. I still feel comfortable whenever I go back to Linux. If Apple gets too stupid I&amp;#8217;ll probably switch back.&lt;/h4&gt;

&lt;p&gt;I spend most of my time in the IDE. I run &lt;a href='http://www.eclipse.org/'&gt;Eclipse&lt;/a&gt; with the &lt;a href='http://scala-ide.org/'&gt;Scala-IDE&lt;/a&gt; plugin. I also use a code coverage plugin for Eclipse that can handle Scala called &lt;a href='https://github.com/jmhofer/eCobertura'&gt;eCobertura&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Despite having an IDE I spend a lot of my time in the console, for that I use &lt;a href='http://iterm.sourceforge.net/'&gt;iTerm&lt;/a&gt;. Being a long-time VIM user I&amp;#8217;m thankful for &lt;a href='https://code.google.com/p/macvim/'&gt;MacVim&lt;/a&gt;, it&amp;#8217;s a great distribution of VIM. I use &lt;a href='http://mxcl.github.com/homebrew/'&gt;Homebrew&lt;/a&gt; for installing commandline tools that are missing from the Mac. At work and in my personal development we use &lt;a href='http://git-scm.com/'&gt;git&lt;/a&gt; exclusively. On my desktop I run &lt;a href='http://jenkins-ci.org/'&gt;Jenkins&lt;/a&gt; for continuous integration. It polls the git repository on my laptop and our remote GitHub Enterprise servers at work. It continuously compiles our code, runs tests and generates reports.&lt;/p&gt;

&lt;p&gt;When using a browser for development I will typically use Chrome. The Chrome plugins I use are for either maintaining privacy or doing software development. I use Poster, Edit this Cookie, AdBlock, Chrome Nanny, Ghostery, Time Tracker, Evernote and &lt;a href='https://chrome.google.com/webstore/detail/https-everywhere/gcbommkclmclpchllfjekcdonpmejbdp'&gt;HTTPS Everywhere&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I use &lt;a href='http://www.share-mouse.com/'&gt;ShareMouse&lt;/a&gt; to make both computers and monitors feel like one big computer. The price is right (free in my case) but it&amp;#8217;s occasionally glitchy.&lt;/p&gt;

&lt;p&gt;For remote work these come in handy: &lt;a href='https://itunes.apple.com/us/app/time-zones/id448041594?mt=12'&gt;TimeZone&lt;/a&gt;, &lt;a href='http://beta.skype.com/en/'&gt;Skype&lt;/a&gt; and &lt;a href='https://join.me/'&gt;join.me&lt;/a&gt; for impromptu screen sharing&lt;/p&gt;

&lt;p&gt;I use &lt;a href='https://evernote.com/'&gt;Evernote&lt;/a&gt; to keep track of information, &lt;a href='https://www.dropbox.com/'&gt;DropBox&lt;/a&gt; to sync files, Pomodoro on occasion to focus, &lt;a href='http://stereopsis.com/flux/'&gt;f.lux&lt;/a&gt; to save my eyes when working after dark, &lt;a href='http://www.alfredapp.com/'&gt;Alfred&lt;/a&gt; as an app launcher and searcher, &lt;a href='http://markedapp.com/'&gt;Marked&lt;/a&gt; for previewing MarkDown files. &lt;a href='http://mindnode.com/'&gt;MindNode&lt;/a&gt; to create mind maps, &lt;a href='http://www.pandabarapp.com/'&gt;PandaBar&lt;/a&gt; to make listening to Pandora radio not depend on Adobe Air (WTF) and &lt;a href='https://github.com/fikovnik/ShiftIt'&gt;ShiftIt&lt;/a&gt; to easily organize windows.&lt;/p&gt;

&lt;h3 id='id20'&gt;#&lt;/h3&gt;

&lt;h4 id='what_would_be_your_dream_setup_pretty_much_my_same_setup_but_with_more_ram_maybe_some_ssds_the_scala_compiler_does_a_lot_of_work_for_you_so_you_need_top_end_hardware_when_youre_doing_any_scala_project_that_is_beyond_trivial_although_our_own_informal_analysis_at_work_seems_to_indicate_that_ssds_dont_buy_you_too_much_for_building_scala_code_seems_that_good_old_fashioned_ram_and_processor_speed_is_what_you_need'&gt;What would be your dream setup? Pretty much my same setup but with more RAM. Maybe some SSDs. The Scala compiler does a lot of work for you so you need top end hardware when you&amp;#8217;re doing any Scala project that is beyond trivial. Although our own informal analysis at work seems to indicate that SSDs don&amp;#8217;t buy you too much for building Scala code, seems that good old fashioned RAM and processor speed is what you need..&lt;/h4&gt;

&lt;p&gt;Other than that I&amp;#8217;d like to have a screaming ThinkPad or AlienWare laptop running some &lt;a href='http://www.debian.org/'&gt;Debian&lt;/a&gt; Linux variant.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/neidetcher/~4/uHpkIsRQ0mo" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http:neidetcher.com/efficiency/2012/11/16/the-setup</feedburner:origLink></entry>
 
 <entry>
   <title>Functional Programming Principles In Scala</title>
   <link href="http://feedproxy.google.com/~r/neidetcher/~3/WZi3g98Pp24/functional-programming-principles-in-scala" />
   <updated>2012-11-09T00:00:00-06:00</updated>
   <id>http:neidetcher.com/programming/2012/11/09/functional-programming-principles-in-scala</id>
   <content type="html">&lt;h1 id='functional_programming_principles_in_scala'&gt;Functional Programming Principles in Scala&lt;/h1&gt;

&lt;p&gt;So here&amp;#8217;s the deal, I was dreading the thought of doing another assignment in the Odersky Scala course on Coursera. I have other projects I want to move on to and man I&amp;#8217;m not built for the academic side. Then they send out an email telling everyone the minimum number of points we need to complete the course. Alt-tab over to a Google Doc spreadsheet, do some quick math and presto, I have way more than enough points. So, I punted on the last assignment. Yep, I&amp;#8217;m that guy, I wrapped up my CS degree with a D in post-calc stats to get the diploma. That&amp;#8217;ll work. Besides my weak finish the course was awesome. If you&amp;#8217;re in the Scala space and you are anything short of a wizard I don&amp;#8217;t understand why you wouldn&amp;#8217;t jump on the opportunity to get instruction from Martin Odersky himself.&lt;/p&gt;

&lt;h4 id='the_course_the_focus_of_the_course_as_you_would_imagine_is_functional_programming_they_take_much_inspiration_from'&gt;The Course The focus of the course, as you would imagine, is functional programming. They take much inspiration from&lt;/h4&gt;

&lt;p&gt;&lt;a href='https://mitpress.mit.edu/sicp/'&gt;SICP&lt;/a&gt;. I don&amp;#8217;t know how much of it was SICP or Martin Odersky himself but the course laid out the proper motivation and revelation of information such that my brain was willing and able to accept it. This was a well thought out, professional course. 50,000 people signed up for the course. I don&amp;#8217;t know how many people finished it. The course developers created an automated system that analyzed your code to make sure it passed their own tests along with some other code analysis. For example I had some code implemented that passed tests but it didn&amp;#8217;t use the &lt;em&gt;groupBy&lt;/em&gt; capability in collections. That was the point of the exercise so they dinged me. Fair enough, they&amp;#8217;re checking lots of stuff.&lt;/p&gt;

&lt;p&gt;Because of the automated nature, the programming assignments have to structured in a particular way. They have to lead you down a path. They can&amp;#8217;t just give you an assignment and a blank canvas. I think this is okay. But it&amp;#8217;s a different approach to programming assignments and worth recognizing.&lt;/p&gt;

&lt;h3 id='id16'&gt;#&lt;/h3&gt;

&lt;h4 id='to_those_that_come_after_here_are_some_things_i_recommend_to_someone_taking_the_course_when_it_is_offered_next'&gt;To Those That Come After Here are some things I recommend to someone taking the course when it is offered next.&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Get the SICP book and refer to it, it helped a few times. Odersky mentions it and I think it&amp;#8217;s fair game to refer to it.&lt;/li&gt;

&lt;li&gt;I didn&amp;#8217;t do any of the video quizes, I don&amp;#8217;t think it hurt me.&lt;/li&gt;

&lt;li&gt;Leverage the Scala-IDE worksheet, dump code in there and play, I think it&amp;#8217;s better than the REPL.&lt;/li&gt;

&lt;li&gt;The forums were sometimes (not very often) helpful.&lt;/li&gt;

&lt;li&gt;Submit early and often. You get great feedback. Some co-workers found that if you put print statements in your code you&amp;#8217;ll see the output in the online feedback, this can give you some indications of the additional test scenarios they are using to evaluate your code.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id='the_cheating_9_coworkers_and_myself_have_our_own_skype_room_dedicated_to_the_course_no_one_wanted_to_cheat_we_all_wanted_to_get_a_lot_out_of_the_class_we_even_made_sure_that_no_one_gave_away'&gt;The Cheating 9 co-workers and myself have our own Skype room dedicated to the course. No one wanted to cheat, we all wanted to get a lot out of the class. We even made sure that no one gave away&lt;/h4&gt;

&lt;p&gt;&lt;em&gt;spoilers&lt;/em&gt; before the projects were due. But we also knew that we would benefit greatly by looking at each others work when we were done with assignments. I actually learned some cool stuff and it was a great time for me to accept the information since I just got done spending hours trying to solve the same problem. So I was one of the guys that had his assignments up on &lt;a href='https://github.com/'&gt;github&lt;/a&gt;. Then we get the email from the admins that we need to take it down. That&amp;#8217;s all cool but they cited how we signed an agreement acknowledging we wouldn&amp;#8217;t post our stuff or whatever. I wish you could see my face but let&amp;#8217;s just say, &lt;strong&gt;no one fuckin reads EULAs&lt;/strong&gt;. If you don&amp;#8217;t already know that, especially if you&amp;#8217;re in software I&amp;#8217;m not sure what to say. So I took it down from &lt;a href='https://github.com/'&gt;github&lt;/a&gt; and put it on a private repo on &lt;a href='https://bitbucket.org/'&gt;bitbucket&lt;/a&gt;. If you don&amp;#8217;t already know, you get free private git repos from &lt;a href='https://bitbucket.org/'&gt;bitbucket&lt;/a&gt;, good stuff.&lt;/p&gt;

&lt;h4 id='on_from_here_im_doing_things_out_of_order_here_but_im_going_to_go_through_the_scala_koans_from_here_just_to_loop_back_and_go_thru_the_basics_some_more_in_the_forums_the_course_administrators_say_they_plan_on_offering_additional_scala_classes_through_coursera_i_look_forward_to_seeing_what_they_offer'&gt;On From Here I&amp;#8217;m doing things out of order here but I&amp;#8217;m going to go through the Scala Koans from here. Just to loop back and go thru the basics some more. In the forums the course administrators say they plan on offering additional Scala classes through Coursera. I look forward to seeing what they offer.&lt;/h4&gt;&lt;img src="http://feeds.feedburner.com/~r/neidetcher/~4/WZi3g98Pp24" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http:neidetcher.com/programming/2012/11/09/functional-programming-principles-in-scala</feedburner:origLink></entry>
 
 <entry>
   <title>Stairway To Scala</title>
   <link href="http://feedproxy.google.com/~r/neidetcher/~3/U3KwgqrRxqw/stairway-to-scala" />
   <updated>2012-10-31T00:00:00-05:00</updated>
   <id>http:neidetcher.com/2012/10/31/stairway-to-scala</id>
   <content type="html">&lt;p&gt;The team I am on at Time Warn Cable has been doing Scala for almost a year now. 5 of us flew out to San Francisco to attend Stairway to Scala training.&lt;/p&gt;

&lt;p&gt;The training was great, I really enjoyed the style of having 2 instructors. One of them doing traditional lessons and the other one would work on the REPL. To engineers things are more real when you can see running code. It&amp;#8217;s obvious that Dick and Bill put lots of effort into the curriculum.&lt;/p&gt;

&lt;p&gt;I recommend the training. Dick Wall and Bill Venners are awesome instructors. The Time Warner Cable crew was pretty punchy and the instructors managed to keep their cool.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/neidetcher/~4/U3KwgqrRxqw" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http:neidetcher.com/2012/10/31/stairway-to-scala</feedburner:origLink></entry>
 
 <entry>
   <title>Spare Box Ci</title>
   <link href="http://feedproxy.google.com/~r/neidetcher/~3/bujnnbXByJw/spare-box-ci" />
   <updated>2012-09-17T00:00:00-05:00</updated>
   <id>http:neidetcher.com/programming/2012/09/17/spare-box-ci</id>
   <content type="html">&lt;p&gt;I have 2 employer provided computers. One is a Mac Book Pro, the other is a Mac Pro. I do my day to day development on the MBP because I want a smooth transition when I&amp;#8217;m on the road. I do this even though the desktop is a beast. At home I use ShareMouse (a software KVM) so that the computers almost seem as one. The desktop streams music from Pandora, has all the IM and email clients.&lt;/p&gt;

&lt;p&gt;I still wanted to leverage the desktop for my workflow. The setup I have allows me to run CI unit tests against my local (laptop) git repo. I&amp;#8217;ll make changes, commit them and then the desktop will poll my laptop to see if there is anything new. If there is something new then it does a full build and unit test. I can continue doing other tasks on the laptop while the desktop is churning through our scala project (compiling scala code is resource intensive). Then when I see that the build is in good shape I&amp;#8217;ll do a push to our team GitHub Enterprise Server.&lt;/p&gt;

&lt;h3 id='on_your_laptop'&gt;On your laptop&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Tell git it&amp;#8217;s okay to export your project by touching this file: &lt;code&gt;&amp;lt;path-to-project&amp;gt;/.git/git-daemon-export-ok &lt;/code&gt;&lt;/li&gt;

&lt;li&gt;Serve up my local repo &lt;code&gt;git daemon --verbose --base-path=&amp;lt;path-to-project&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id='on_your_desktop'&gt;On your desktop&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Install Jenkins on the desktop&lt;/li&gt;

&lt;li&gt;Point desktop Jenkins to your git repo: &lt;code&gt;git://&amp;lt;your-network-ip&amp;gt;/.git&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The end result looks something like this:&lt;/p&gt;

&lt;p&gt;&lt;span&gt;&lt;img alt='spare box ci' src='https://farm9.staticflickr.com/8320/7997187470_608a1573f1.jpg' /&gt;&lt;span&gt;(http://www.flickr.com/photos/neidetcher/7997187470/)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/neidetcher/~4/bujnnbXByJw" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http:neidetcher.com/programming/2012/09/17/spare-box-ci</feedburner:origLink></entry>
 
 <entry>
   <title>Scala Encoding Fun</title>
   <link href="http://feedproxy.google.com/~r/neidetcher/~3/b1WjzVOxvcs/scala-encoding-fun" />
   <updated>2012-03-15T00:00:00-05:00</updated>
   <id>http:neidetcher.com/programming/2012/03/15/scala-encoding-fun</id>
   <content type="html">&lt;p&gt;I pulled a toy Scala &lt;a href='https://github.com/demian0311/scalakata'&gt;project&lt;/a&gt; into Eclipse and saw this problem:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;IO error while decoding [file].scala with UTF-8 Please try specifying another one using the -encoding option&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href='http://p5wscala.wordpress.com/tag/encoding/'&gt;This guy&lt;/a&gt; didn&amp;#8217;t have the exact solution but he got me pointed in the right direction. The problem is that I must have copied in some non-UTF-8 characters into my source code. At this point the Scala compiler got confused.&lt;/p&gt;

&lt;p&gt;Here&amp;#8217;s a bunch of shell commands I did to fix the problem:&lt;/p&gt;

&lt;h3 id='figure_out_the_character_set_of_the_file_were_having_trouble_with'&gt;Figure out the character set of the file we&amp;#8217;re having trouble with&lt;/h3&gt;

&lt;pre&gt;&lt;code&gt;~/code/scalakata&amp;gt;file -I ./src/test/scala/com/neidetcher/sfti/Chapter1Test.scala
./src/test/scala/com/neidetcher/sfti/Chapter1Test.scala: text/x-java; charset=iso-8859-1&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Yep, the old iso-8859-1, that&amp;#8217;s not what we want. That&amp;#8217;s what we use as the &lt;em&gt;from&lt;/em&gt; encoding.&lt;/p&gt;

&lt;h3 id='make_a_copy_of_the_offending_file_utf8'&gt;Make a copy of the offending file UTF-8&lt;/h3&gt;

&lt;pre&gt;&lt;code&gt;~/code/scalakata&amp;gt;iconv -f iso-8859-1 -t utf-8 ./src/test/scala/com/neidetcher/sfti/Chapter1Test.scala &amp;gt; ./src/test/scala/com/neidetcher/sfti/Chapter1Test.scala.utf8&lt;/code&gt;&lt;/pre&gt;

&lt;h3 id='the_diff_command_will_show_you_what_the_offending_line_was'&gt;The diff command will show you what the offending line was&lt;/h3&gt;

&lt;pre&gt;&lt;code&gt;~/code/scalakata&amp;gt;diff ./src/test/scala/com/neidetcher/sfti/Chapter1Test.scala ./src/test/scala/com/neidetcher/sfti/Chapter1Test.scala.utf8
134c134
&amp;lt; 		// 4) Scala lets you multiply a string with a number?try out &amp;quot;crazy&amp;quot; * 3 in the REPL. What does this operation do? Where can you find it in Scaladoc?
---
&amp;gt; 		// 4) Scala lets you multiply a string with a numberÑtry out &amp;quot;crazy&amp;quot; * 3 in the REPL. What does this operation do? Where can you find it in Scaladoc?&lt;/code&gt;&lt;/pre&gt;

&lt;h3 id='now_actually_replace_the_old_file'&gt;Now actually replace the old file&lt;/h3&gt;

&lt;pre&gt;&lt;code&gt;~/code/scalakata&amp;gt;mv ./src/test/scala/com/neidetcher/sfti/Chapter1Test.scala.utf8 ./src/test/scala/com/neidetcher/sfti/Chapter1Test.scala&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;After that I was back in business.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/neidetcher/~4/b1WjzVOxvcs" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http:neidetcher.com/programming/2012/03/15/scala-encoding-fun</feedburner:origLink></entry>
 
 <entry>
   <title>Current Lifting Program</title>
   <link href="http://feedproxy.google.com/~r/neidetcher/~3/GHz4mS06kXc/current-lifting-program" />
   <updated>2012-01-03T00:00:00-06:00</updated>
   <id>http:neidetcher.com/fitness/2012/01/03/current-lifting-program</id>
   <content type="html">&lt;p&gt;Over the past couple years I have gotten back into weight lifting. It has been great, I&amp;#8217;m stronger than I was when I was in the Marines 20 years ago. I&amp;#8217;m nowhere near as fast though, maybe we&amp;#8217;ll work on that in the future.&lt;/p&gt;

&lt;h3 id='kettlebell'&gt;Kettlebell&lt;/h3&gt;

&lt;p&gt;When I first got back into lifting I picked up the kettlebell at the recommendation of Bryan Noll. This was a good place to start. If I was stranded on a desert island and could only have one piece of equipment it would be a 53 pound kettlebell. The simplicity of the device makes it easy to get going.&lt;/p&gt;

&lt;p&gt;I read Enter the Kettlebell, it&amp;#8217;s a great resource to start. It&amp;#8217;s probably enough just to buy yourself a kettlebell and watch some YouTub videos.&lt;/p&gt;

&lt;h3 id='5x5'&gt;5x5&lt;/h3&gt;

&lt;p&gt;Eventually I wanted more body composition changes so I put together a 5x5 program for myself. I was inspired by the &lt;a href='http://stronglifts.com/'&gt;Stong Lifts e-book&lt;/a&gt; but didn&amp;#8217;t use his program. He lays out a full-body system where every day you work all muscle groups using old-school multi-joint barbell lifts.&lt;br /&gt;I think my body doesn&amp;#8217;t recover quickly enough to lift a few times in a week. I have always been that way even though I respond well to lifting weights.&lt;/p&gt;

&lt;p&gt;I created a split routine that was push, pull and legs. With a handful of exercises that were all 5 sets of 5 reps. I got great results with this.&lt;/p&gt;

&lt;h3 id='531'&gt;5/3/1&lt;/h3&gt;

&lt;p&gt;In the fall of 2011 I started &lt;a href='http://www.jimwendler.com/'&gt;Jim Wendlers 5/3/1 program&lt;/a&gt;. 5/3/1 is an undulating progression routine where you increase weights for 3 weeks then take a week to do light work. The 4 weeks you do the same gradual progression but with 5-10 more pounds. A program like 5/3/1 makes sense when you are no longer able to make linear progression of 5 pounds for a lift between workouts.&lt;/p&gt;

&lt;p&gt;I can&amp;#8217;t hold a candle to the time under the bar and intelligence that Jim Wendler has but after a couple cycles I quit doing 5/3/1 strictly.&lt;/p&gt;

&lt;p&gt;There are a couple reasons I didn&amp;#8217;t like 5/3/1 strictly: * my military press or overhead press is already in great shape and I don&amp;#8217;t need an entire day for shoulder work. * I didn&amp;#8217;t like the abscence of a day spent on back and pulling. Although the 5/3/1 deadlift day would probably be seen as a back day also. 5/3/1 also suggests doing pull-ups between all push movements, that would get you lots of time pulling.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ll probably give strict 5/3/1 another chance but for now this is what I&amp;#8217;m doing.&lt;/p&gt;

&lt;h3 id='modified_531'&gt;Modified 5/3/1&lt;/h3&gt;

&lt;h4 id='leg'&gt;Leg&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;5/3/1 squat&lt;/li&gt;

&lt;li&gt;3x10 leg curl&lt;/li&gt;

&lt;li&gt;3x10 leg extension&lt;/li&gt;

&lt;li&gt;3x20 weighted hyper-extension&lt;/li&gt;

&lt;li&gt;3x10 squat&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id='press'&gt;Press&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;5/3/1 bench&lt;/li&gt;

&lt;li&gt;3x10 military press&lt;/li&gt;

&lt;li&gt;3x10 dumbell press&lt;/li&gt;

&lt;li&gt;3x10 arnold press&lt;/li&gt;

&lt;li&gt;3x10 tricep press&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id='pull'&gt;Pull&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;3 sets of pull ups, assisted&lt;/li&gt;

&lt;li&gt;3x10 bent row&lt;/li&gt;

&lt;li&gt;3x10 upright row&lt;/li&gt;

&lt;li&gt;3x10 db row&lt;/li&gt;

&lt;li&gt;3x10 curl machine&lt;/li&gt;

&lt;li&gt;3x10 hang clean&lt;/li&gt;
&lt;/ul&gt;
&lt;!--include:disqus.htm--&gt;&lt;img src="http://feeds.feedburner.com/~r/neidetcher/~4/GHz4mS06kXc" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http:neidetcher.com/fitness/2012/01/03/current-lifting-program</feedburner:origLink></entry>
 
 <entry>
   <title>Jekyll Introduction</title>
   <link href="http://feedproxy.google.com/~r/neidetcher/~3/Q9Fiio3MLWg/jekyll-introduction" />
   <updated>2011-12-29T00:00:00-06:00</updated>
   <id>http:neidetcher.com/lessons/2011/12/29/jekyll-introduction</id>
   <content type="html">&lt;p&gt;This Jekyll introduction will outline specifically what Jekyll is and why you would want to use it. Directly following the intro we&amp;#8217;ll learn exactly &lt;em&gt;how&lt;/em&gt; Jekyll does what it does.&lt;/p&gt;

&lt;h2 id='overview'&gt;Overview&lt;/h2&gt;

&lt;h3 id='what_is_jekyll'&gt;What is Jekyll?&lt;/h3&gt;

&lt;p&gt;Jekyll is a parsing engine bundled as a ruby gem used to build static websites from dynamic components such as templates, partials, liquid code, markdown, etc. Jekyll is known as &amp;#8220;a simple, blog aware, static site generator&amp;#8221;.&lt;/p&gt;

&lt;h3 id='examples'&gt;Examples&lt;/h3&gt;

&lt;p&gt;This website is created with Jekyll. &lt;a href='https://github.com/mojombo/jekyll/wiki/Sites'&gt;Other Jekyll websites&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id='what_does_jekyll_do'&gt;What does Jekyll Do?&lt;/h3&gt;

&lt;p&gt;Jekyll is a ruby gem you install on your local system. Once there you can call &lt;code&gt;jekyll --server&lt;/code&gt; on a directory and provided that directory is setup in a way jekyll expects, it will do magic stuff like parse markdown/textile files, compute categories, tags, permalinks, and construct your pages from layout templates and partials.&lt;/p&gt;

&lt;p&gt;Once parsed, Jekyll stores the result in a self-contained static &lt;code&gt;_site&lt;/code&gt; folder. The intention here is that you can serve all contents in this folder statically from a plain static web-server.&lt;/p&gt;

&lt;p&gt;You can think of Jekyll as a normalish dynamic blog but rather than parsing content, templates, and tags on each request, Jekyll does this once &lt;em&gt;beforehand&lt;/em&gt; and caches the &lt;em&gt;entire website&lt;/em&gt; in a folder for serving statically.&lt;/p&gt;

&lt;h3 id='jekyll_is_not_blogging_software'&gt;Jekyll is Not Blogging Software&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Jekyll is a parsing engine.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Jekyll does not come with any content nor does it have any templates or design elements. This is a common source of confusion when getting started. Jekyll does not come with anything you actually use or see on your website - you have to make it.&lt;/p&gt;

&lt;h3 id='why_should_i_care'&gt;Why Should I Care?&lt;/h3&gt;

&lt;p&gt;Jekyll is very minimalistic and very efficient. The most important thing to realize about Jekyll is that it creates a static representation of your website requiring only a static web-server. Traditional dynamic blogs like Wordpress require a database and server-side code. Heavily trafficked dynamic blogs must employ a caching layer that ultimately performs the same job Jekyll sets out to do; serve static content.&lt;/p&gt;

&lt;p&gt;Therefore if you like to keep things simple and you prefer the command-line over an admin panel UI then give Jekyll a try.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Developers like Jekyll because we can write content like we write code:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ability to write content in markdown or textile in your favorite text-editor.&lt;/li&gt;

&lt;li&gt;Ability to write and preview your content via localhost.&lt;/li&gt;

&lt;li&gt;No internet connection required.&lt;/li&gt;

&lt;li&gt;Ability to publish via git.&lt;/li&gt;

&lt;li&gt;Ability to host your blog on a static web-server.&lt;/li&gt;

&lt;li&gt;Ability to host freely on GitHub Pages.&lt;/li&gt;

&lt;li&gt;No database required.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id='how_jekyll_works'&gt;How Jekyll Works&lt;/h1&gt;

&lt;p&gt;The following is a complete but concise outline of exactly how Jekyll works.&lt;/p&gt;

&lt;p&gt;Be aware that core concepts are introduced in rapid succession without code examples. This information is not intended to specifically teach you how to do anything, rather it is intended to give you the &lt;em&gt;full picture&lt;/em&gt; relative to what is going on in Jekyll-world.&lt;/p&gt;

&lt;p&gt;Learning these core concepts should help you avoid common frustrations and ultimately help you better understand the code examples contained throughout Jekyll-Bootstrap.&lt;/p&gt;

&lt;h2 id='initial_setup'&gt;Initial Setup&lt;/h2&gt;

&lt;p&gt;After &lt;a href='/index.html#start-now'&gt;installing jekyll&lt;/a&gt; you&amp;#8217;ll need to format your website directory in a way jekyll expects. Jekyll-bootstrap conveniently provides the base directory format.&lt;/p&gt;

&lt;h3 id='the_jekyll_application_base_format'&gt;The Jekyll Application Base Format&lt;/h3&gt;

&lt;p&gt;Jekyll expects your website directory to be laid out like so:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;.
|-- _config.yml
|-- _includes
|-- _layouts
|   |-- default.html
|   |-- post.html
|-- _posts
|   |-- 2011-10-25-open-source-is-good.markdown
|   |-- 2011-04-26-hello-world.markdown
|-- _site
|-- index.html
|-- assets
    |-- css
        |-- style.css
    |-- javascripts&lt;/code&gt;&lt;/pre&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;_config.yml&lt;/strong&gt;&lt;br /&gt;Stores configuration data.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;strong&gt;_includes&lt;/strong&gt;&lt;br /&gt;This folder is for partial views.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;strong&gt;_layouts&lt;/strong&gt; &lt;br /&gt;This folder is for the main templates your content will be inserted into. You can have different layouts for different pages or page sections.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;strong&gt;_posts&lt;/strong&gt;&lt;br /&gt;This folder contains your dynamic content/posts. the naming format is required to be &lt;code&gt;@YEAR-MONTH-DATE-title.MARKUP@&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;strong&gt;_site&lt;/strong&gt;&lt;br /&gt;This is where the generated site will be placed once Jekyll is done transforming it.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;strong&gt;assets&lt;/strong&gt;&lt;br /&gt;This folder is not part of the standard jekyll structure. The assets folder represents &lt;em&gt;any generic&lt;/em&gt; folder you happen to create in your root directory. Directories and files not properly formatted for jekyll will be left untouched for you to serve normally.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;(read more: &lt;a href='https://github.com/mojombo/jekyll/wiki/Usage'&gt;https://github.com/mojombo/jekyll/wiki/Usage&lt;/a&gt;)&lt;/p&gt;

&lt;h3 id='jekyll_configuration'&gt;Jekyll Configuration&lt;/h3&gt;

&lt;p&gt;Jekyll supports various configuration options that are fully outlined here: &lt;a href='https://github.com/mojombo/jekyll/wiki/Configuration'&gt;https://github.com/mojombo/jekyll/wiki/Configuration&lt;/a&gt;&lt;/p&gt;

&lt;h2 id='content_in_jekyll'&gt;Content in Jekyll&lt;/h2&gt;

&lt;p&gt;Content in Jekyll is either a post or a page. These content &amp;#8220;objects&amp;#8221; get inserted into one or more templates to build the final output for its respective static-page.&lt;/p&gt;

&lt;h3 id='posts_and_pages'&gt;Posts and Pages&lt;/h3&gt;

&lt;p&gt;Both posts and pages should be written in markdown, textile, or HTML and may also contain Liquid templating syntax. Both posts and pages can have meta-data assigned on a per-page basis such as title, url path, as well as arbitrary custom meta-data.&lt;/p&gt;

&lt;h3 id='working_with_posts'&gt;Working With Posts&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Creating a Post&lt;/strong&gt; &lt;br /&gt;Posts are created by properly formatting a file and placing it the &lt;code&gt;_posts&lt;/code&gt; folder.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Formatting&lt;/strong&gt;&lt;br /&gt;A post must have a valid filename in the form &lt;code&gt;YEAR-MONTH-DATE-title.MARKUP&lt;/code&gt; and be placed in the &lt;code&gt;_posts&lt;/code&gt; directory. If the data format is invalid Jekyll will not recognize the file as a post. The date and title are automatically parsed from the filename of the post file. Additionally, each file must have &lt;a href='https://github.com/mojombo/jekyll/wiki/YAML-Front-Matter'&gt;YAML Front-Matter&lt;/a&gt; prepended to its content. YAML Front-Matter is a valid YAML syntax specifying meta-data for the given file.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Order&lt;/strong&gt;&lt;br /&gt;Ordering is an important part of Jekyll but it is hard to specify a custom ordering strategy. Only reverse chronological and chronological ordering is supported in Jekyll.&lt;/p&gt;

&lt;p&gt;Since the date is hard-coded into the filename format, to change the order, you must change the dates in the filenames.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tags&lt;/strong&gt; &lt;br /&gt;Posts can have tags associated with them as part of their meta-data. Tags may be placed on posts by providing them in the post&amp;#8217;s YAML front matter. You have access to the post-specific tags in the templates. These tags also get added to the sitewide collection.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Categories&lt;/strong&gt; &lt;br /&gt;Posts may be categorized by providing one or more categories in the YAML front matter. Categories offer more significance over tags in that they can be reflected in the URL path to the given post. Note categories in Jekyll work in a specific way. If you define more than one category you are defining a category hierarchy &amp;#8220;set&amp;#8221;. Example:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;---
title :  Hello World
categories : [lessons, beginner]
---&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This defines the category hierarchy &amp;#8220;lessons/beginner&amp;#8221;. Note this is &lt;em&gt;one category&lt;/em&gt; node in Jekyll. You won&amp;#8217;t find &amp;#8220;lessons&amp;#8221; and &amp;#8220;beginner&amp;#8221; as two separate categories unless you define them elsewhere as singular categories.&lt;/p&gt;

&lt;h3 id='working_with_pages'&gt;Working With Pages&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Creating a Page&lt;/strong&gt;&lt;br /&gt;Pages are created by properly formatting a file and placing it anywhere in the root directory or subdirectories that do &lt;em&gt;not&lt;/em&gt; start with an underscore.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Formatting&lt;/strong&gt;&lt;br /&gt;In order to register as a Jekyll page the file must contain &lt;a href='https://github.com/mojombo/jekyll/wiki/YAML-Front-Matter'&gt;YAML Front-Matter&lt;/a&gt;. Registering a page means 1) that Jekyll will process the page and 2) that the page object will be available in the &lt;code&gt;site.pages&lt;/code&gt; array for inclusion into your templates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Categories and Tags&lt;/strong&gt;&lt;br /&gt;Pages do not compute categories nor tags so defining them will have no effect.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sub-Directories&lt;/strong&gt;&lt;br /&gt;If pages are defined in sub-directories, the path to the page will be reflected in the url. Example:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;.
|-- people
    |-- bob
        |-- essay.html&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This page will be available at &lt;code&gt;http://yourdomain.com/people/bob/essay.html&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Recommended Pages&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;index.html&lt;/strong&gt;&lt;br /&gt;You will always want to define the root index.html page as this will display on your root URL.&lt;/li&gt;

&lt;li&gt;&lt;strong&gt;404.html&lt;/strong&gt;&lt;br /&gt;Create a root 404.html page and GitHub Pages will serve it as your 404 response.&lt;/li&gt;

&lt;li&gt;&lt;strong&gt;sitemap.html&lt;/strong&gt;&lt;br /&gt;Generating a sitemap is good practice for SEO.&lt;/li&gt;

&lt;li&gt;&lt;strong&gt;about.html&lt;/strong&gt;&lt;br /&gt;A nice about page is easy to do and gives the human perspective to your website.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id='templates_in_jekyll'&gt;Templates in Jekyll&lt;/h2&gt;

&lt;p&gt;Templates are used to contain a page&amp;#8217;s or post&amp;#8217;s content. All templates have access to a global site object variable: &lt;code&gt;site&lt;/code&gt; as well as a page object variable: &lt;code&gt;page&lt;/code&gt;. The site variable holds all accessible content and metadata relative to the site. The page variable holds accessible data for the given page or post being rendered at that point.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create a Template&lt;/strong&gt;&lt;br /&gt;Templates are created by properly formatting a file and placing it in the &lt;code&gt;_layouts&lt;/code&gt; directory.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Formatting&lt;/strong&gt;&lt;br /&gt;Templates should be coded in HTML and contain YAML Front Matter. All templates can contain Liquid code to work with your site&amp;#8217;s data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rending Page/Post Content in a Template&lt;/strong&gt;&lt;br /&gt;There is a special variable in all templates named : &lt;code&gt;content&lt;/code&gt;. The &lt;code&gt;content&lt;/code&gt; variable holds the page/post content including any sub-template content previously defined. Render the content variable wherever you want your main content to be injected into your template:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;...
&amp;lt;body&amp;gt;
  &amp;lt;div id="sidebar"&amp;gt; ... &amp;lt;/div&amp;gt;
  &amp;lt;div id="main"&amp;gt;
    &amp;#123;{content}&amp;#125;
  &amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
...&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id='subtemplates'&gt;Sub-Templates&lt;/h3&gt;

&lt;p&gt;Sub-templates are exactly templates with the only difference being they define another &amp;#8220;root&amp;#8221; layout/template within their YAML Front Matter. This essentially means a template will render inside of another template.&lt;/p&gt;

&lt;h3 id='includes'&gt;Includes&lt;/h3&gt;

&lt;p&gt;In Jekyll you can define include files by placing them in the &lt;code&gt;_includes&lt;/code&gt; folder. Includes are NOT templates, rather they are just code snippets that get included into templates. In this way, you can treat the code inside includes as if it was native to the parent template.&lt;/p&gt;

&lt;p&gt;Any valid template code may be used in includes.&lt;/p&gt;

&lt;h2 id='using_liquid_for_templating'&gt;Using Liquid for Templating&lt;/h2&gt;

&lt;p&gt;Templating is perhaps the most confusing and frustrating part of Jekyll. This is mainly due to the fact that Jekyll templates must use the Liquid Templating Language.&lt;/p&gt;

&lt;h3 id='what_is_liquid'&gt;What is Liquid?&lt;/h3&gt;

&lt;p&gt;&lt;a href='https://github.com/Shopify/liquid'&gt;Liquid&lt;/a&gt; is a secure templating language developed by &lt;a href='http://shopify.com'&gt;Shopify&lt;/a&gt;. Liquid is designed for end-users to be able to execute logic within template files without imposing any security risk on the hosting server.&lt;/p&gt;

&lt;p&gt;Jekyll uses Liquid to generate the post content within the final page layout structure and as the primary interface for working with your site and post/page data.&lt;/p&gt;

&lt;h3 id='why_do_we_have_to_use_liquid'&gt;Why Do We Have to Use Liquid?&lt;/h3&gt;

&lt;p&gt;GitHub uses Jekyll to power &lt;a href='http://pages.github.com/'&gt;GitHub Pages&lt;/a&gt;. GitHub cannot afford to run arbitrary code on their servers so they lock developers down via Liquid.&lt;/p&gt;

&lt;h3 id='liquid_is_not_programmerfriendly'&gt;Liquid is Not Programmer-Friendly.&lt;/h3&gt;

&lt;p&gt;The short story is liquid is not real code and its not intended to execute real code. The point being you can&amp;#8217;t do jackshit in liquid that hasn&amp;#8217;t been allowed explicitly by the implementation. What&amp;#8217;s more you can only access data-structures that have been explicitly passed to the template.&lt;/p&gt;

&lt;p&gt;In Jekyll&amp;#8217;s case it is not possible to alter what is passed to Liquid without hacking the gem or running custom plugins. Both of which cannot be supported by GitHub Pages.&lt;/p&gt;

&lt;p&gt;As a programmer - this is very frustrating.&lt;/p&gt;

&lt;p&gt;But rather than look a gift horse in the mouth we are going to suck it up and view it as an opportunity to work around limitations and adopt client-side solutions when possible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Aside&lt;/strong&gt; &lt;br /&gt;My personal stance is to not invest time trying to hack liquid. It&amp;#8217;s really unnecessary &lt;em&gt;from a programmer&amp;#8217;s&lt;/em&gt; perspective. That is to say if you have the ability to run custom plugins (i.e. run arbitrary ruby code) you are better off sticking with ruby. Toward that end I&amp;#8217;ve built &lt;a href='http://github.com/plusjade/mustache-with-jekyll'&gt;Mustache-with-Jekyll&lt;/a&gt;&lt;/p&gt;

&lt;h2 id='static_assets'&gt;Static Assets&lt;/h2&gt;

&lt;p&gt;Static assets are any file in the root or non-underscored subfolders that are not pages. That is they have no valid YAML Front Matter and are thus not treated as Jekyll Pages.&lt;/p&gt;

&lt;p&gt;Static assets should be used for images, css, and javascript files.&lt;/p&gt;

&lt;h2 id='how_jekyll_parses_files'&gt;How Jekyll Parses Files&lt;/h2&gt;

&lt;p&gt;Remember Jekyll is a processing engine. There are two main types of parsing in Jekyll.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Content parsing.&lt;/strong&gt; &lt;br /&gt;This is done with textile or markdown.&lt;/li&gt;

&lt;li&gt;&lt;strong&gt;Template parsing.&lt;/strong&gt; &lt;br /&gt;This is done with the liquid templating language.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And thus there are two main types of file formats needed for this parsing.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Post and Page files.&lt;/strong&gt;&lt;br /&gt;All content in Jekyll is either a post or a page so valid posts and pages are parsed with markdown or textile.&lt;/li&gt;

&lt;li&gt;&lt;strong&gt;Template files.&lt;/strong&gt; &lt;br /&gt;These files go in &lt;code&gt;_layouts&lt;/code&gt; folder and contain your blogs &lt;strong&gt;templates&lt;/strong&gt;. They should be made in HTML with the help of Liquid syntax. Since include files are simply injected into templates they are essentially parsed as if they were native to the template.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Arbitrary files and folders.&lt;/strong&gt; &lt;br /&gt;Files that &lt;em&gt;are not&lt;/em&gt; valid pages are treated as static content and pass through Jekyll untouched and reside on your blog in the exact structure and format they originally existed in.&lt;/p&gt;

&lt;h3 id='formatting_files_for_parsing'&gt;Formatting Files for Parsing.&lt;/h3&gt;

&lt;p&gt;We&amp;#8217;ve outlined the need for valid formatting using &lt;strong&gt;YAML Front Matter&lt;/strong&gt;. Templates, posts, and pages all need to provide valid YAML Front Matter even if the Matter is empty. This is the only way Jekyll knows you want the file processed.&lt;/p&gt;

&lt;p&gt;YAML Front Matter must be prepended to the top of template/post/page files:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;---
layout: post
category : pages
tags : [how-to, jekyll]
---

... contents ...&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Three hyphens on a new line start the Front-Matter block and three hyphens on a new line end the block. The data inside the block must be valid YAML.&lt;/p&gt;

&lt;p&gt;Configuration parameters for YAML Front-Matter is outlined here: &lt;a href='https://github.com/mojombo/jekyll/wiki/YAML-Front-Matter'&gt;A comprehensive explanation of YAML Front Matter&lt;/a&gt;&lt;/p&gt;

&lt;h4 id='defining_layouts_for_posts_and_templates_parsing'&gt;Defining Layouts for Posts and Templates Parsing.&lt;/h4&gt;

&lt;p&gt;The &lt;code&gt;layout&lt;/code&gt; parameter in the YAML Front Matter defines the template file for which the given post or template should be injected into. If a template file specifies its own layout, it is effectively being used as a &lt;code&gt;sub-template.&lt;/code&gt; That is to say loading a post file into a template file that refers to another template file with work in the way you&amp;#8217;d expect; as a nested sub-template.&lt;/p&gt;

&lt;h2 id='how_jekyll_generates_the_final_static_files'&gt;How Jekyll Generates the Final Static Files.&lt;/h2&gt;

&lt;p&gt;Ultimately, Jekyll&amp;#8217;s job is to generate a static representation of your website. The following is an outline of how that&amp;#8217;s done:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Jekyll collects data.&lt;/strong&gt; &lt;br /&gt;Jekyll scans the posts directory and collects all posts files as post objects. It then scans the layout assets and collects those and finally scans other directories in search of pages.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Jekyll computes data.&lt;/strong&gt; &lt;br /&gt;Jekyll takes these objects, computes metadata (permalinks, tags, categories, titles, dates) from them and constructs one big &lt;code&gt;site&lt;/code&gt; object that holds all the posts, pages, layouts, and respective metadata. At this stage your site is one big computed ruby object.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Jekyll liquifies posts and templates.&lt;/strong&gt;&lt;br /&gt;Next jekyll loops through each post file and converts (through markdown or textile) and &lt;strong&gt;liquifies&lt;/strong&gt; the post inside of its respective layout(s). Once the post is parsed and liquified inside the the proper layout structure, the layout itself is &amp;#8220;liquified&amp;#8221;. &lt;br /&gt;&lt;strong&gt;Liquification&lt;/strong&gt; is defined as follows: Jekyll initiates a Liquid template, and passes a simpler hash representation of the ruby site object as well as a simpler hash representation of the ruby post object. These simplified data structures are what you have access to in the templates.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Jekyll generates output.&lt;/strong&gt; &lt;br /&gt;Finally the liquid templates are &amp;#8220;rendered&amp;#8221;, thereby processing any liquid syntax provided in the templates and saving the final, static representation of the file.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Notes.&lt;/strong&gt;&lt;br /&gt;Because Jekyll computes the entire site in one fell swoop, each template is given access to a global &lt;code&gt;site&lt;/code&gt; hash that contains useful data. It is this data that you&amp;#8217;ll iterate through and format using the Liquid tags and filters in order to render it onto a given page.&lt;/p&gt;

&lt;p&gt;Remember, in Jekyll you are an end-user. Your API has only two components:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The manner in which you setup your directory.&lt;/li&gt;

&lt;li&gt;The liquid syntax and variables passed into the liquid templates.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;All the data objects available to you in the templates via Liquid are outlined in the &lt;strong&gt;API Section&lt;/strong&gt; of Jekyll-Bootstrap. You can also read the original documentation here: &lt;a href='https://github.com/mojombo/jekyll/wiki/Template-Data'&gt;https://github.com/mojombo/jekyll/wiki/Template-Data&lt;/a&gt;&lt;/p&gt;

&lt;h2 id='conclusion'&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;I hope this paints a clearer picture of what Jekyll is doing and why it works the way it does. As noted, our main programming constraint is the fact that our API is limited to what is accessible via Liquid and Liquid only.&lt;/p&gt;

&lt;p&gt;Jekyll-bootstrap is intended to provide helper methods and strategies aimed at making it more intuitive and easier to work with Jekyll =)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thank you&lt;/strong&gt; for reading this far.&lt;/p&gt;

&lt;h2 id='next_steps'&gt;Next Steps&lt;/h2&gt;

&lt;p&gt;Please take a look at &lt;a href='' /&gt; or jump right into &lt;a href=''&gt;Usage&lt;/a&gt; if you&amp;#8217;d like.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/neidetcher/~4/Q9Fiio3MLWg" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http:neidetcher.com/lessons/2011/12/29/jekyll-introduction</feedburner:origLink></entry>
 
 <entry>
   <title>Book Review My Job Went To India</title>
   <link href="http://feedproxy.google.com/~r/neidetcher/~3/FtAbS1T9P-M/book-review-my-job-went-to-india" />
   <updated>2006-03-19T00:00:00-06:00</updated>
   <id>http:neidetcher.com/2006/03/19/book-review-my-job-went-to-india</id>
   <content type="html">&lt;!--include:header.htm--&gt;
&lt;p&gt;i bought the pdf version of the book.  if you haven't bought a pdf book from the pragmatic programmers they give you a customized book complete with your name on each page.  to do this processing it takes a few minutes before you can actually download your book.  your name in the book is to discourage you from throwing it up on some p2p system i'm sure.&lt;br /&gt;&lt;br /&gt;the book was great, i felt the same way as when i read the &lt;span style="font-style:italic;"&gt;pragmatic programmer&lt;/span&gt;.  there were lots of moments where the author said things that seem obvious but it's always good to get validation.  even tho a lot of the information should be a given to anyone in the tech business the book serves as a kick in the pants to motivate you into change.&lt;br /&gt;&lt;br /&gt;the book was well worth the price for the information that was new to me.  it wasn't so much new information but insightful things you can do to improve yourself.&lt;br /&gt;&lt;br /&gt;here are some good points from the book:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;learn some obscure technologies: you can get a new perspective and differentiate yourself from the herd.&lt;br /&gt;&lt;li&gt;learn your domain: if you're in telecom, learn your vertical, the coder ignorant of his business won't last long in the future.&lt;br /&gt;&lt;li&gt;be a generalist: be a 1 man shop, networking, dba, coder, tester, architect&lt;br /&gt;&lt;li&gt;be a specialist: if you are a java developer &lt;b&gt;know java&lt;/b&gt;.  know how the classloader works, know serialization, know how to break the jvm, know garbage collection, know the libraries.&lt;br /&gt;&lt;li&gt;don't become tiffany: remember her?  it's better to be like madonna, change with the times.  do an audit of your skills and where they are in the marketplace.  look for new trends.&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;it's worth mentioning that the author has reverence for people in india.  he appreciates the culture and reminds us that they are intelligent as their stateside counterparts.  he reminds the reader that most indian workers are highly motivated to improve their standard of living.  the author also gives you insight into establishing a good relationship with distributed teams.&lt;br /&gt;&lt;br /&gt;there's lots more wisdom in the book.  in the process of reading the book i've made a checklist of things i want to do to improve myself professionally; books to read, tasks to do and things to learn.  ...yeah, i know i'm so cool, seriously tho, that might be a good way to approach the book.  as i said, the book is worth the price especially if you're getting the pdf ($13).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/0976694018?ie=UTF8&amp;tag=demian0311blo-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0976694018"&gt;My Job Went to India: And All I Got Was This Lousy Book (Pragmatic Programmers)&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=demian0311blo-20&amp;l=as2&amp;o=1&amp;a=0976694018" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;&lt;/p&gt;
&lt;!--include:disqus.htm--&gt;
&lt;!--include:footer.htm--&gt;
&lt;img src="http://feeds.feedburner.com/~r/neidetcher/~4/FtAbS1T9P-M" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http:neidetcher.com/2006/03/19/book-review-my-job-went-to-india</feedburner:origLink></entry>
 
 
</feed>
