<?xml version='1.0' encoding='utf-8' ?>
<!--  If you are running a bot please visit this policy page outlining rules you must respect. https://www.livejournal.com/bots/  -->
<rss version='2.0'  xmlns:lj='http://www.livejournal.org/rss/lj/1.0/' xmlns:media='http://search.yahoo.com/mrss/' xmlns:atom10='http://www.w3.org/2005/Atom'>
<channel>
  <title>The Musings and Ramblings of Kyle J. Boddy</title>
  <link>https://kylebee.livejournal.com/</link>
  <description>The Musings and Ramblings of Kyle J. Boddy - LiveJournal.com</description>
  <lastBuildDate>Sun, 28 May 2017 09:37:26 GMT</lastBuildDate>
  <generator>LiveJournal / LiveJournal.com</generator>
  <lj:journal>kylebee</lj:journal>
  <lj:journalid>240900</lj:journalid>
  <lj:journaltype>personal</lj:journaltype>
  <copyright>NOINDEX</copyright>
  <image>
    <url>https://l-userpic.livejournal.com/37898436/240900</url>
    <title>The Musings and Ramblings of Kyle J. Boddy</title>
    <link>https://kylebee.livejournal.com/</link>
    <width>99</width>
    <height>100</height>
  </image>

  <item>
  <guid isPermaLink='true'>https://kylebee.livejournal.com/777242.html</guid>
  <pubDate>Sun, 28 May 2017 09:37:26 GMT</pubDate>
  <title>end of an era</title>
  <author>kylebee</author>
  <link>https://kylebee.livejournal.com/777242.html</link>
  <description>&lt;span  class=&quot;ljuser  i-ljuser  i-ljuser-deleted  i-ljuser-type-P     &quot;  data-ljuser=&quot;sleepinbeauty&quot; lj:user=&quot;sleepinbeauty&quot; &gt;&lt;a href=&quot;https://sleepinbeauty.livejournal.com/profile/&quot;  target=&quot;_self&quot;  class=&quot;i-ljuser-profile&quot; &gt;&lt;img  class=&quot;i-ljuser-userhead&quot;  src=&quot;https://l-stat.livejournal.net/img/userinfo_v8.png?v=17080&amp;v=924&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://sleepinbeauty.livejournal.com/&quot; class=&quot;i-ljuser-username&quot;   target=&quot;_self&quot;   &gt;&lt;b&gt;sleepinbeauty&lt;/b&gt;&lt;/a&gt;&lt;/span&gt; was the only reason I kept up with LJ. Boo, L. But I understand.&lt;br /&gt;&lt;br /&gt;Crazy to close the book after... 14 years? More? &lt;br /&gt;&lt;br /&gt;I&amp;#39;ll leave all the posts up of course.</description>
  <comments>https://kylebee.livejournal.com/777242.html?view=comments#comments</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
  </item>
  <item>
  <guid isPermaLink='true'>https://kylebee.livejournal.com/776732.html</guid>
  <pubDate>Wed, 28 Aug 2013 10:36:14 GMT</pubDate>
  <title>Hello</title>
  <author>kylebee</author>
  <link>https://kylebee.livejournal.com/776732.html</link>
  <description>So I train baseball players full-time now. Prior to that I was a Data Scientist making a lot of money and eventually rage quit the software development industry entirely, because I was trying to ignore the very thing I knew about myself when I was 17 years old - that I don&amp;#39;t like computers.&lt;br /&gt;&lt;br /&gt;Well, I don&amp;#39;t like them in a certain way. You understand. Or you don&amp;#39;t. Anyway.&lt;br /&gt;&lt;br /&gt;Yeah. Moving to Seattle gave me the opportunity (as fake as it may have been; there&amp;#39;s no reason I couldn&amp;#39;t have done this in Cleveland) to change my life. And I did. I have become even more introverted, more of a jerk (mostly just brutally honest), and more anti-academic than I used to be. Which is hard, considering.&lt;br /&gt;&lt;br /&gt;Still very hard on myself.&lt;br /&gt;&lt;br /&gt;Oh, I have a two-year old son. Tycho. He is a pain in the ass. Advice: If you like your life, don&amp;#39;t have kids. Not saying that I liked my life before I had kids, but just saying that if you don&amp;#39;t want everything you do to be completely removed from your life, you shouldn&amp;#39;t have a kid. Because that&amp;#39;s what happened with me. In some respects, this was a good thing. In others, not so much. But oh well. &lt;br /&gt;&lt;br /&gt;I kinda miss this place. It is clear it has a niche that no other social media site ever really replaced. Or ever will, probably.&lt;br /&gt;&lt;br /&gt;Believe it or not, I still read my Friends List every so often. And maybe I just pick the right people, but it sure seems like many of you have done something exceptional with your lives. And that is awesome.&lt;br /&gt;&lt;br /&gt;Continue being great. And write about it. I&amp;#39;d write about how I went from a nobody baseball trainer to giving seminars and having pros fly out to train at our facility, but the intersection of science and sports is a small one indeed - especially the one I happen to reside in. As such, no one cares. Which really kinda sucks. Well maybe you care, but you aren&amp;#39;t interested in having a 4 hour long conversation about it with me. Which is what I really want.&lt;br /&gt;&lt;br /&gt;But if there were enough people willing to have that conversation with me, I wouldn&amp;#39;t be dominating my niche, I guess. I learn a lot about entrepreneurship and really how lonely it can be with each passing day.&lt;br /&gt;&lt;br /&gt;Anyway, keep on. Especially you, &lt;span  class=&quot;ljuser  i-ljuser  i-ljuser-deleted  i-ljuser-type-P     &quot;  data-ljuser=&quot;sleepinbeauty&quot; lj:user=&quot;sleepinbeauty&quot; &gt;&lt;a href=&quot;https://sleepinbeauty.livejournal.com/profile/&quot;  target=&quot;_self&quot;  class=&quot;i-ljuser-profile&quot; &gt;&lt;img  class=&quot;i-ljuser-userhead&quot;  src=&quot;https://l-stat.livejournal.net/img/userinfo_v8.png?v=17080&amp;v=924&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://sleepinbeauty.livejournal.com/&quot; class=&quot;i-ljuser-username&quot;   target=&quot;_self&quot;   &gt;&lt;b&gt;sleepinbeauty&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;.</description>
  <comments>https://kylebee.livejournal.com/776732.html?view=comments#comments</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
  </item>
  <item>
  <guid isPermaLink='true'>https://kylebee.livejournal.com/776531.html</guid>
  <pubDate>Sat, 03 Mar 2012 13:15:56 GMT</pubDate>
  <title>Hmm</title>
  <author>kylebee</author>
  <link>https://kylebee.livejournal.com/776531.html</link>
  <description>Seems like my blog posts on kyleboddy.com are not being sent over here. No matter, I hardly update there either.&lt;br /&gt;&lt;br /&gt;I still think about a lot of you guys, believe it or not. And I still read my friends list once a week. Have done so for 11.5 years. Pretty amazing, actually.&lt;br /&gt;&lt;br /&gt;Hope all is well out there.</description>
  <comments>https://kylebee.livejournal.com/776531.html?view=comments#comments</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>1</lj:reply-count>
  </item>
  <item>
  <guid isPermaLink='true'>https://kylebee.livejournal.com/776295.html</guid>
  <pubDate>Tue, 26 Apr 2011 23:02:13 GMT</pubDate>
  <title>Mass Geolocation Script (PHP)</title>
  <author>kylebee</author>
  <link>https://kylebee.livejournal.com/776295.html</link>
  <description>&lt;p style=&quot;border: 1px solid black; padding: 3px;&quot;&gt;&lt;strong&gt;Originally published at &lt;a href=&quot;http://www.kyleboddy.com/2011/04/26/mass-geolocation-script-php/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Kyle Boddy&lt;/a&gt;. You can comment here or &lt;a href=&quot;http://www.kyleboddy.com/2011/04/26/mass-geolocation-script-php/#comments&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;there&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;I recently wrote a mass geolocation script in PHP since Google seems to be taking down all the websites that offer this vital service. Right now it:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Checks a table for records without lat/long coordinates&lt;/li&gt;
&lt;li&gt;Sends those records&apos; addresses to Google&apos;s geolocation API&lt;/li&gt;
&lt;li&gt;Updates your records with the lat/long coordinates&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It checks for the &quot;#&quot; sign and handles it since Google has problems with translating &quot;2020 Anywhere Place #200&quot; as a real address, but there are probably other errors I haven&apos;t adequately checked for.&lt;/p&gt;
&lt;p&gt;At the moment it updates records that are missing lat/long coordinates and writes zeroes into those fields if it can&apos;t geolocate the address correctly. As a result, if you run the script again, it will assume those records were updated correctly and will pass over them, since they are not null. This is a known issue and is one (of many) areas of improvement for the script.&lt;/p&gt;
&lt;p&gt;I didn&apos;t want to spend a ton of hours on the script to make it a full-fledged awesome service, since Google doesn&apos;t seem to like that. It&apos;s just a basic script that handles common problems and works well enough.&lt;/p&gt;
&lt;p&gt;You can get it over at my &lt;a title=&quot;GeoCode&quot; href=&quot;https://github.com/kyleboddy/GeoCode&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;GitHub repo page for GeoCode&lt;/a&gt;. Enjoy.&lt;/p&gt;
</description>
  <comments>https://kylebee.livejournal.com/776295.html?view=comments#comments</comments>
  <category>mysql</category>
  <category>github</category>
  <category>lat long coordinates</category>
  <category>google maps</category>
  <category>php</category>
  <category>software development</category>
  <category>geolocation</category>
  <category>geocode</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
  </item>
  <item>
  <guid isPermaLink='true'>https://kylebee.livejournal.com/775945.html</guid>
  <pubDate>Wed, 20 Apr 2011 23:29:58 GMT</pubDate>
  <title>Football Outsiders is a Joke</title>
  <author>kylebee</author>
  <link>https://kylebee.livejournal.com/775945.html</link>
  <description>&lt;p style=&quot;border: 1px solid black; padding: 3px;&quot;&gt;&lt;strong&gt;Originally published at &lt;a href=&quot;http://www.kyleboddy.com/2011/04/20/football-outsiders-is-a-joke/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Kyle Boddy&lt;/a&gt;. You can comment here or &lt;a href=&quot;http://www.kyleboddy.com/2011/04/20/football-outsiders-is-a-joke/#comments&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;there&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://www.footballoutsiders.com/stat-analysis/2011/introducing-lewin-career-forecast-v20&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;This article is terrible&lt;/a&gt; and I&apos;m not really going to explain why, but anytime you see this kind of language:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;-were chosen in the first two rounds&lt;br /&gt;
-had at least 33 games started in college&lt;br /&gt;
-completed at least 58 percent of passes in college&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;You can be reasonably sure the author is either lying, stupid, and/or dishonest. Note that these three traits are not mutually exclusive from one another.&lt;/p&gt;
</description>
  <comments>https://kylebee.livejournal.com/775945.html?view=comments#comments</comments>
  <category>regression</category>
  <category>data snooping</category>
  <category>football outsiders</category>
  <category>mathematics</category>
  <category>statistics</category>
  <lj:security>public</lj:security>
  <lj:reply-count>1</lj:reply-count>
  </item>
  <item>
  <guid isPermaLink='true'>https://kylebee.livejournal.com/775820.html</guid>
  <pubDate>Tue, 05 Apr 2011 18:45:12 GMT</pubDate>
  <title>Humor: Recursion</title>
  <author>kylebee</author>
  <link>https://kylebee.livejournal.com/775820.html</link>
  <description>&lt;p style=&quot;border: 1px solid black; padding: 3px;&quot;&gt;&lt;strong&gt;Originally published at &lt;a href=&quot;http://www.kyleboddy.com/2011/04/05/humor-recursion/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Kyle Boddy&lt;/a&gt;. You can comment here or &lt;a href=&quot;http://www.kyleboddy.com/2011/04/05/humor-recursion/#comments&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;there&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;&lt;div class=&quot;&quot; style=&quot;width:650px&quot;&gt;&lt;img title=&quot;Recursion&quot; src=&quot;https://i.imgur.com/xKqml.png&quot; alt=&quot;&quot; width=&quot;640&quot; height=&quot;960&quot; fetchpriority=&quot;high&quot; /&gt;&lt;p class=&quot;&quot;&gt;Ah, Google.&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Awesome.&lt;/p&gt;
</description>
  <comments>https://kylebee.livejournal.com/775820.html?view=comments#comments</comments>
  <category>google</category>
  <category>humor</category>
  <category>trolling</category>
  <category>recursion</category>
  <category>software development</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
  </item>
  <item>
  <guid isPermaLink='true'>https://kylebee.livejournal.com/775462.html</guid>
  <pubDate>Tue, 05 Apr 2011 06:23:37 GMT</pubDate>
  <title>Newest XAMPP Doesn&amp;#8217;t Work as Expected</title>
  <author>kylebee</author>
  <link>https://kylebee.livejournal.com/775462.html</link>
  <description>&lt;p style=&quot;border: 1px solid black; padding: 3px;&quot;&gt;&lt;strong&gt;Originally published at &lt;a href=&quot;http://www.kyleboddy.com/2011/04/04/newest-xampp-doesnt-work-as-expected/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Kyle Boddy&lt;/a&gt;. You can comment here or &lt;a href=&quot;http://www.kyleboddy.com/2011/04/04/newest-xampp-doesnt-work-as-expected/#comments&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;there&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;I was going to type up a giant thing about why the newest &lt;strong&gt;XAMPP &lt;/strong&gt;doesn&apos;t work well with MySQL because it&apos;s packaged with a beta PHP version and stuff... but I honestly don&apos;t want to elaborate. Just know that I wasted 4-6 hours of my life and about an hour of Site5&apos;s support because of the newest XAMPP being a beta product without the label.&lt;/p&gt;
&lt;p&gt;If you use Windows, don&apos;t use XAMPP 1.7.4. Use 1.7.3 and &lt;a href=&quot;http://sourceforge.net/projects/xampp/files/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;get it from the SourceForge archive&lt;/a&gt;. Trust me.&lt;/p&gt;
</description>
  <comments>https://kylebee.livejournal.com/775462.html?view=comments#comments</comments>
  <category>general tech</category>
  <category>xampp</category>
  <category>software development</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
  </item>
  <item>
  <guid isPermaLink='true'>https://kylebee.livejournal.com/774955.html</guid>
  <pubDate>Thu, 24 Mar 2011 16:16:16 GMT</pubDate>
  <title>Springloops is awesome, HeidiSQL is annoying, Site5 disappoints</title>
  <author>kylebee</author>
  <link>https://kylebee.livejournal.com/774955.html</link>
  <description>&lt;p style=&quot;border: 1px solid black; padding: 3px;&quot;&gt;&lt;strong&gt;Originally published at &lt;a href=&quot;http://www.kyleboddy.com/2011/03/24/springloops-is-awesome-heidisql-is-annoying-site5-disappoints/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Kyle Boddy&lt;/a&gt;. You can comment here or &lt;a href=&quot;http://www.kyleboddy.com/2011/03/24/springloops-is-awesome-heidisql-is-annoying-site5-disappoints/#comments&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;there&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;I&apos;ve started to use &lt;a title=&quot;Springloops&quot; href=&quot;http://www.springloops.com/v2/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Springloops RC2&lt;/a&gt; for my version control efforts, which is really awesome. They support SVN and git (no Mercurial yet), have a great interface with easy deployments to multiple servers so you can split them up into production/staging/development, a solid ticketing system, and a good code browser. Also, it&apos;s completely free!&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;&quot; title=&quot;Springloops&quot; src=&quot;https://imgprx.livejournal.net/bb5404d8619e691cbddae892c77e1358745eb6753581fd104387e2155703c196/P2WlxyVijxKvg29s8slTUEMdsf-ah7h0yFmVCaFDndnd9BTbmtG2RkkpDQhhTAJ4-VBQkDzNZk1VE1VOgA:QQSBwsik_erSuptX5pvefA&quot; alt=&quot;Springloops&quot; width=&quot;246&quot; height=&quot;189&quot; fetchpriority=&quot;high&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a title=&quot;HeidiSQL&quot; href=&quot;http://www.heidisql.com/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;HeidiSQL&lt;/a&gt; has been my Windows MySQL GUI of choice ever since I switched to it from Toad. It&apos;s generally very good, it&apos;s FOSS, and it handles most operations fairly well - except for CSV importing. &lt;a title=&quot;Site5&quot; href=&quot;http://www.site5.com/in.php?id=26638&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Site5&lt;/a&gt; is my current webhost, and I&apos;m very happy with them 99.9% of the time, but they caused me a bit of pain recently. I have a lot of CSVs to import that are about 10-15 MB in size each, and I tried importing them through the very handy phpmyadmin tool. However, phpmyadmin has some memory leaks and issues with importing larger CSVs, so it ended up crashing due to memory problems on the larger files (even though it theoretically can handle up to 105MB CSVs). I sent Site5 a ticket to have them import the CSVs manually (they said they would), but they responded with &quot;there&apos;s no table structure in your DB so we can&apos;t do it.&quot; Well, uh, that&apos;s what phpmyadmin does and why I wanted to use it over the 7 tables I need to make with 20 or so CSV files. They refused again without providing me an alternative, so I had do it myself.&lt;/p&gt;
&lt;p&gt;I fired up HeidiSQL, manually created the tables, and imported the CSV. And... it didn&apos;t work. I ignored the first row (column headers), but it still responded with &quot;invalid data.&quot; The fields were correctly cast for the rest of the data, so I didn&apos;t know what was up. A bit of Googling tells me that even if you ignore the first row, HeidiSQL still checks it against the data types in your table. This is idiotic and annoying for any number of reasons, all of which I leave up to you to figure out.&lt;/p&gt;
&lt;p&gt;At any rate, deleting the first row and ignoring 0 rows ended up working just fine. Now to do this repetitive task over and over again...&lt;/p&gt;
</description>
  <comments>https://kylebee.livejournal.com/774955.html?view=comments#comments</comments>
  <category>mysql</category>
  <category>web dev</category>
  <category>heidisql</category>
  <category>data analysis</category>
  <category>springloops</category>
  <category>csv</category>
  <category>version control</category>
  <category>software development</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
  </item>
  <item>
  <guid isPermaLink='true'>https://kylebee.livejournal.com/774672.html</guid>
  <pubDate>Fri, 18 Mar 2011 06:22:09 GMT</pubDate>
  <title>Advanced Injury Database: RESTful Web Service Launched</title>
  <author>kylebee</author>
  <link>https://kylebee.livejournal.com/774672.html</link>
  <description>&lt;p style=&quot;border: 1px solid black; padding: 3px;&quot;&gt;&lt;strong&gt;Originally published at &lt;a href=&quot;http://www.kyleboddy.com/2011/03/17/advanced-injury-database-restful-web-service-launched/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Kyle Boddy&lt;/a&gt;. You can comment here or &lt;a href=&quot;http://www.kyleboddy.com/2011/03/17/advanced-injury-database-restful-web-service-launched/#comments&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;there&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;&lt;div class=&quot;&quot; style=&quot;width:310px&quot;&gt;&lt;a href=&quot;http://www.kyleboddy.com/wp-content/uploads/2010/10/injurydb.png&quot; rel=&quot;lightbox[360]&quot; title=&quot;Advanced Injury Database&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;&quot; title=&quot;Advanced Injury Database&quot; src=&quot;https://imgprx.livejournal.net/049d0f677d79650425d6c416dafce9f2d52ec81b5144afc6e9aa89af79520c45/P2WlxyVijxKvg29s8slTUEMdsf-ah7h0yFmVCblKg9XR_BzQjI-mB0dpF1c6HUJ_okdbiHLLcw9KHFYf0kprrhZA2ieAMeeL-EhJoBMseUK8C7LO4Y9eh2oSow:5Noaz31Dyy1mAtxPygm3VA&quot; alt=&quot;Advanced Injury Database&quot; width=&quot;300&quot; height=&quot;177&quot; fetchpriority=&quot;high&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;&quot;&gt;Advanced Injury Database&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;I&apos;ve launched a RESTful web interface for my &lt;a href=&quot;http://injurydb.drivelinebaseball.com&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Advanced Baseball Injury Database&lt;/a&gt;. A major problem with PITCHf/x and injury databases are that people are building them over and over against on their local (or hosted) servers, and this is a huge amount of overhead for the sabermetric community. The way to properly do this is to have one giant amalgamated database with a few trusted caretakers that deal with the updating/maintenance/feature requests while everyone else accesses the data using RESTful web services.&lt;/p&gt;
&lt;p&gt;This makes updating and standardizing a dataset much easier and gives end users a much easier back-end interface into the database.&lt;/p&gt;
&lt;p&gt;To access the RESTful service, you must first authenticate with the Advanced Baseball Injury Database over Facebook. (Anti-Facebook users: &lt;strong&gt;Get over it. &lt;/strong&gt;I&apos;m not going to spam your wall or steal your info, and I made this database entirely open for you to use.) You can do that on the &lt;a href=&quot;http://injurydb.drivelinebaseball.com/index.php/injurydb/detailedinjuries&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Detailed Injuries Service&lt;/a&gt; page. This stores a unique key in my database and grants you access to make RESTful requests.&lt;/p&gt;
&lt;div class=&quot;&quot; style=&quot;width:691px&quot;&gt;&lt;img class=&quot;&quot; title=&quot;Example of the key&quot; src=&quot;https://imgprx.livejournal.net/7811a47ae5ecf2fc79ead751158a66c0c69bcd99c9bd025191fbf8eae21d1bd7/P2WlxyVijxKvg29s8slTUEMdsf-ah7h0yFmVCblKg9XR_BzQjI-mB0dpF1c6HUJ_okdbiHLLcw9KHFYf0kprrhdA2ySAKuyS-VxFqF9rOhWuDg:jjJxRCZqKbxMrnxVRLpbjw&quot; alt=&quot;Example of the key&quot; width=&quot;681&quot; height=&quot;289&quot; loading=&quot;lazy&quot; /&gt;&lt;p class=&quot;&quot;&gt;Example of the key&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Easy enough. Copy that key down. You will need this going forward.&lt;/p&gt;
&lt;h3&gt;Making the Request: High-Level Overview&lt;/h3&gt;
&lt;p&gt;All you have to do to get injury information about ANY player from 2002-2010 is to go to this URL:&lt;/p&gt;
&lt;p&gt;http://injurydb.drivelinebaseball.com/index.php/injurydb/injuryservice/&lt;span style=&quot;color: #0000ff;&quot;&gt;&lt;strong&gt;eliasid&lt;/strong&gt;&lt;/span&gt;/&lt;span style=&quot;color: #ff0000;&quot;&gt;&lt;strong&gt;key&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;(I&apos;ve been told that &quot;eliasID&quot; is the wrong term and I&apos;m supposed to use mlbAMID. However, I&apos;ve already coded it like &quot;eliasid&quot; and that&apos;s what I call it in real life, so you&apos;ll just have to deal with it if it bothers you.)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;For example, if you use Jered Weaver&apos;s eliasID (450308) and my key (66- wait a minute, nice try), you get this in your web browser (squashed for easier reading):&lt;/p&gt;
&lt;div class=&quot;&quot; style=&quot;width:482px&quot;&gt;&lt;a href=&quot;http://www.kyleboddy.com/wp-content/uploads/2011/03/results.jpg&quot; rel=&quot;lightbox[360]&quot; title=&quot;Jered Weaver&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;&quot; title=&quot;Jered Weaver&quot; src=&quot;https://imgprx.livejournal.net/ff86e27f601bf4c3242dc674e1d58c774af972096b531456aab1da2424fef0cc/P2WlxyVijxKvg29s8slTUEMdsf-ah7h0yFmVCblKg9XR_BzQjI-mB0dpF1c6HUJ_okdbiHLLcw9KHFYf0kprrhdA2ySAKuyS-FZEt19rOhWuDg:yhcDQ0JMQzb-7PoKqfmdow&quot; alt=&quot;Jered Weaver&quot; width=&quot;472&quot; height=&quot;320&quot; loading=&quot;lazy&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;&quot;&gt;Jered Weaver&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Looks pretty ridiculous, right? Well, that&apos;s JavaScript Object Notation - JSON. You can easily parse &lt;strong&gt;that &lt;/strong&gt;to get &lt;strong&gt;this&lt;/strong&gt;:&lt;/p&gt;
&lt;div class=&quot;&quot; style=&quot;width:640px&quot;&gt;&lt;a href=&quot;http://www.kyleboddy.com/wp-content/uploads/2011/03/results1.jpg&quot; rel=&quot;lightbox[360]&quot; title=&quot;Jered Weaver - See!&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;&quot; title=&quot;Jered Weaver - See!&quot; src=&quot;https://imgprx.livejournal.net/9823337ed85addd7525c21527698a0c275bcb8ba2f0635a206b75a06c190e2c1/P2WlxyVijxKvg29s8slTUEMdsf-ah7h0yFmVCblKg9XR_BzQjI-mB0dpF1c6HUJ_okdbiHLLcw9KHFYf0kprrhdA2ySAKuyS-FZEt0AvIALrUf4:edm7g9i4TncV5xj2D5EcGA&quot; alt=&quot;Jered Weaver - See!&quot; width=&quot;630&quot; height=&quot;137&quot; loading=&quot;lazy&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;&quot;&gt;Jered Weaver - See!&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;So, how do you do that? Good question.&lt;/p&gt;
&lt;h3&gt;Making the Request: Low-Level Overview&lt;/h3&gt;
&lt;p&gt;If you&apos;ve read this far, you probably want some code examples. No problem. I am a PHP/CodeIgniter/MySQL kind of guy, so those are the examples I&apos;m going to give to you. However, I&apos;m including both the simple way - &lt;em&gt;file_get_contents()&lt;/em&gt; - and the tougher (but more universal) way - cURL. They should be all you need to get going.&lt;/p&gt;
&lt;p&gt;Here&apos;s how you can use &lt;em&gt;file_get_contents()&lt;/em&gt; in PHP to decode the JSON and echo it out to the browser:&lt;/p&gt;
&lt;pre class=&quot;&quot; title=&quot;&quot;&gt;
function testinjuryservice()
	{
		// point it to Jered Weaver&apos;s eliasID and return it to the browser
		$contents = file_get_contents(&apos;http://injurydb.drivelinebaseball.com/index.php/injurydb/injuryservice/450308/YOURKEYHERE&apos;);

		// decode the json returned from the service
		$info = json_decode($contents);

		// count number of injury movements
		// must cast object into an array to accurately count the number of injuries
		$injuries = count((array)$info);
		$x = 1;

		while ($x &amp;lt;= $injuries)
		{
		      // echo $info-&amp;gt;{$x}-&amp;gt;{&apos;DateOn&apos;};
		      // you would use the above line to get the &amp;quot;DateOn&amp;quot; value for the xth injury
		      // repeat this with DateOff, injury, injury_type, etc

		      // dump contents of the given injury out
		      print_r($info-&amp;gt;{$x});
		      echo &apos;&amp;lt;br /&amp;gt;&apos;;
		      $x++;
		}
	}
&lt;/pre&gt;
&lt;p&gt;And here&apos;s the cURL example:&lt;/p&gt;
&lt;pre class=&quot;&quot; title=&quot;&quot;&gt;
function testinjuryservice()
	{
		// open cURL
		$ch = curl_init();

		// point it to Jered Weaver&apos;s eliasID and return it to the browser
		curl_setopt($ch, CURLOPT_URL,
		&apos;http://injurydb.drivelinebaseball.com/index.php/injurydb/injuryservice/450308/YOURKEYHERE&apos;);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

		// assign it to $contents
		$contents = curl_exec ($ch);

		// close cURL
		curl_close ($ch);

		// decode the json returned from the service
		$info = json_decode($contents);

		// count number of injury movements
		// must cast object into an array to accurately count the number of injuries
		$injuries = count((array)$info);
		$x = 1;

		while ($x &amp;lt;= $injuries)
		{
		      // echo $info-&amp;gt;{$x}-&amp;gt;{&apos;DateOn&apos;};
		      // you would use the above line to get the &amp;quot;DateOn&amp;quot; value for the xth injury
		      // repeat this with DateOff, injury, injury_type, etc

		      // dump contents of the given injury out
		      print_r($info-&amp;gt;{$x});
		      echo &apos;&amp;lt;br /&amp;gt;&apos;;
		      $x++;
		}
	}
&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;VERY IMPORTANT: &lt;/strong&gt;I start the JSON array at &lt;strong&gt;1, &lt;/strong&gt;not &lt;strong&gt;0&lt;/strong&gt;. Don&apos;t be a slave to default counting. Humans start at 1 when they count up.&lt;/p&gt;
&lt;p&gt;If you screw up the eliasID or your authentication key, you will get this error in the array&apos;s first position:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;{&quot;1&quot;:{&quot;1&quot;:&quot;Invalid key or eliasID given.&quot;}}&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Alternatively, I may have banned you from the service for too many requests, which segues well into the next point: Don&apos;t abuse this system. This is not meant for you to spider my entire database by requesting every player&apos;s information from eliasID 10 (Kris Benson: fun fact) to eliasID 9999999999. Can&apos;t we all get along?&lt;/p&gt;
&lt;h3&gt;Where Do We Go From Here?&lt;/h3&gt;
&lt;p&gt;Well, if you like the service, drop me a line - &lt;em&gt;kyle at driveline baseball dot com&lt;/em&gt;. I&apos;d love to hear from you, and if you want to collaborate, that&apos;s cool too.&lt;/p&gt;
&lt;p&gt;You can keep an eye out for &lt;a title=&quot;Kyle Boddy&amp;apos;s THT Articles&quot; href=&quot;http://www.hardballtimes.com/main/authors/kyle/2011/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;my articles at The Hardball Times&lt;/a&gt;, where I write about PITCHf/x stuff and exercise science things. Or check out my baseball training company&apos;s site, &lt;a title=&quot;Driveline Baseball - Developing the Elite Athlete&quot; href=&quot;http://www.drivelinebaseball.com/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Driveline Baseball&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I plan on developing a RESTful PITCHf/x interface in the future depending on interest, my motivational levels, free time, and how much I think this is going to wreck my bandwidth costs. Ideally a bunch of us pitch in, rent a cheap VPS, and we serve it up to all sabermetricians who are interested in this kind of stuff. We write tutorials and make it open source and grant freedom of information. Is that feasible? Who knows!&lt;/p&gt;
&lt;p&gt;Have fun.&lt;/p&gt;
</description>
  <comments>https://kylebee.livejournal.com/774672.html?view=comments#comments</comments>
  <category>rest</category>
  <category>web services</category>
  <category>baseball</category>
  <category>pitchf/x</category>
  <category>injury database</category>
  <category>software development</category>
  <lj:security>public</lj:security>
  <lj:reply-count>4</lj:reply-count>
  </item>
  <item>
  <guid isPermaLink='true'>https://kylebee.livejournal.com/774512.html</guid>
  <pubDate>Sun, 13 Mar 2011 20:18:53 GMT</pubDate>
  <title>PITCHf/x Corrections Done on the Baseball Injury Database</title>
  <author>kylebee</author>
  <link>https://kylebee.livejournal.com/774512.html</link>
  <description>&lt;p style=&quot;border: 1px solid black; padding: 3px;&quot;&gt;&lt;strong&gt;Originally published at &lt;a href=&quot;http://www.kyleboddy.com/2011/03/13/pitchfx-corrections-done-on-the-baseball-injury-database/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Kyle Boddy&lt;/a&gt;. You can comment here or &lt;a href=&quot;http://www.kyleboddy.com/2011/03/13/pitchfx-corrections-done-on-the-baseball-injury-database/#comments&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;there&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Title says it all, for the most part:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://injurydb.drivelinebaseball.com/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;http://injurydb.drivelinebaseball.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Corrections to release point data were implemented with the generous help of Max Marchi of The Hardball Times. Go check them out! Regression sets are coming...&lt;/p&gt;
</description>
  <comments>https://kylebee.livejournal.com/774512.html?view=comments#comments</comments>
  <category>baseball</category>
  <category>pitchf/x</category>
  <category>software development</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
  </item>
  <item>
  <guid isPermaLink='true'>https://kylebee.livejournal.com/774331.html</guid>
  <pubDate>Wed, 16 Feb 2011 19:29:54 GMT</pubDate>
  <title>A Brief Rant on Neo-Sabermetrics</title>
  <author>kylebee</author>
  <link>https://kylebee.livejournal.com/774331.html</link>
  <description>&lt;p style=&quot;border: 1px solid black; padding: 3px;&quot;&gt;&lt;strong&gt;Originally published at &lt;a href=&quot;http://www.kyleboddy.com/2011/02/16/a-brief-rant-on-neo-sabermetrics/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Kyle Boddy&lt;/a&gt;. You can comment here or &lt;a href=&quot;http://www.kyleboddy.com/2011/02/16/a-brief-rant-on-neo-sabermetrics/#comments&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;there&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;(taken from a message board post where I was discussing PITCHf/x uncertainty)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Discussion of these correction algorithms and uncertainty around something that is precisely measured brings up a tangential point: Physicists are rather famous for saying &quot;Any measurement that you make without knowledge of its uncertainty is completely meaningless.&quot; (Walter Lewin, actually)&lt;/p&gt;
&lt;p&gt;And so this is a good thing that we talk about it for PITCHf/x, because uncertainty is good. However, the move in sabermetrics to blindly accept observed data is very... bad. I&apos;ll stand behind OBP and SLG all day, since these have no uncertainties around them. Same with linear weights (for what they area). But... UZR/DRS/TZ.... no. These are based off of observed measurements from BIS/GIS stringers that have a serious uncertainty around them. Additionally, the data has been shown to have serious park biases - especially in Chavez Ravine.&lt;/p&gt;
&lt;p&gt;This is the old PECOTA/BPro issue all over again - when you keep data proprietary and sell it piecemeal, you suffer from publisher&apos;s bias and all sorts of conflict of interest. And then this data is fitted to an equation that has some regression involved in it, further compounding the error (and worse: drawing conclusions from facts not found in evidence).&lt;/p&gt;
&lt;p&gt;UZR and other similar concepts should have an uncertainty listed. Saying someone&apos;s UZR is +15.5 is ridiculous; the same is true for saying someone&apos;s fastball has a linear weight of +1.2 runs. The former is stupid because stringers have serious uncertainty around them (which goes unreported and unquantified) and the latter is dumb because we do not know for sure that someone&apos;s fastball is indeed a fastball (not all pitch types are characterized correctly).&lt;/p&gt;
&lt;p&gt;And so the derivation of stuff like linear weights and objective data needs to be separated from the.... well... psuedoscience (psuedoanalysis?) that is often done with UZR/DRS and other measurements like it. Just because analysts qualify that the data is indeed &quot;fuzzy&quot; does not make it okay. You need to publish uncertainty measurements or error bars, otherwise the data (and especially its conclusions) are worthless.&lt;/p&gt;
</description>
  <comments>https://kylebee.livejournal.com/774331.html?view=comments#comments</comments>
  <category>baseball</category>
  <category>pitchf/x</category>
  <category>random thoughts</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
  </item>
  <item>
  <guid isPermaLink='true'>https://kylebee.livejournal.com/774046.html</guid>
  <pubDate>Tue, 15 Feb 2011 19:08:12 GMT</pubDate>
  <title>Creating Batch Users in TankAuth (CodeIgniter)</title>
  <author>kylebee</author>
  <link>https://kylebee.livejournal.com/774046.html</link>
  <description>&lt;p style=&quot;border: 1px solid black; padding: 3px;&quot;&gt;&lt;strong&gt;Originally published at &lt;a href=&quot;http://www.kyleboddy.com/2011/02/15/creating-batch-users-in-tankauth-codeigniter/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Kyle Boddy&lt;/a&gt;. You can comment here or &lt;a href=&quot;http://www.kyleboddy.com/2011/02/15/creating-batch-users-in-tankauth-codeigniter/#comments&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;there&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;As detailed in &lt;a href=&quot;http://stackoverflow.com/questions/4867979/codeigniter-php-creating-users-in-batch-with-tankauth&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;this Stack Overflow request&lt;/a&gt;, I had the need to convert an existing database of users/passwords (stored in plaintext) to our new authentication library driven by CI and TankAuth. User &lt;strong&gt;jondavidjohn&lt;/strong&gt; got me on the right track, and here&apos;s the code I ended up writing to submit to Stack Overflow for sample use:&lt;/p&gt;
&lt;pre class=&quot;&quot; title=&quot;&quot;&gt;
function batchReg()
	{
		$this-&amp;amp;gt;load-&amp;amp;gt;model(&apos;mymodel&apos;);

		// connect to the database
		$this-&amp;amp;gt;mymodel-&amp;amp;gt;dbconnect();

		// build it
		$query = &amp;amp;quot;SELECT user, email, pass from newusers ORDER BY user ASC&amp;amp;quot;;

		// ship it
		$result = mysql_query($query);

		// loop it
		while ($row = mysql_fetch_array($result))
		{
			$data = $this-&amp;amp;gt;tank_auth-&amp;amp;gt;create_user($row[&apos;user&apos;], $row[&apos;email&apos;], $row[&apos;pass&apos;], FALSE);
			print_r($data);
			echo &amp;amp;quot;&amp;amp;lt;p&amp;amp;gt;&amp;amp;quot;;
		}

	}
&lt;/pre&gt;
&lt;p&gt;Enjoy!&lt;/p&gt;
</description>
  <comments>https://kylebee.livejournal.com/774046.html?view=comments#comments</comments>
  <category>codeigniter</category>
  <category>php</category>
  <category>software development</category>
  <category>hacking</category>
  <category>authentication</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
  </item>
  <item>
  <guid isPermaLink='true'>https://kylebee.livejournal.com/773700.html</guid>
  <pubDate>Mon, 14 Feb 2011 16:44:27 GMT</pubDate>
  <title>Scaffolding in CodeIgniter: Controller Code</title>
  <author>kylebee</author>
  <link>https://kylebee.livejournal.com/773700.html</link>
  <description>&lt;p style=&quot;border: 1px solid black; padding: 3px;&quot;&gt;&lt;strong&gt;Originally published at &lt;a href=&quot;http://www.kyleboddy.com/2011/02/14/scaffolding-in-codeigniter-controller-code/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Kyle Boddy&lt;/a&gt;. You can comment here or &lt;a href=&quot;http://www.kyleboddy.com/2011/02/14/scaffolding-in-codeigniter-controller-code/#comments&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;there&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Now that scaffolding has finally been removed from CodeIgniter, they&apos;ve removed all references to it. However, I still use this function for clients, and as a result, stick with the 1.7.3 branch for now. If you&apos;re in the same situation and need the simple controller code, here it is:&lt;/p&gt;
&lt;pre class=&quot;&quot; title=&quot;&quot;&gt;

&amp;lt;?php
class edit extends Controller {

     function edit()
     {
          parent::Controller();
          $this-&amp;gt;load-&amp;gt;scaffolding(&apos;tableName&apos;);
     }
}
&lt;/pre&gt;
&lt;p&gt;Be sure to properly set your database configuration connections (database.php) and scaffolding trigger (routes.php) to make this work.&lt;/p&gt;
</description>
  <comments>https://kylebee.livejournal.com/773700.html?view=comments#comments</comments>
  <category>codeigniter</category>
  <category>general tech</category>
  <category>scaffolding</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
  </item>
  <item>
  <guid isPermaLink='true'>https://kylebee.livejournal.com/773509.html</guid>
  <pubDate>Tue, 08 Feb 2011 23:20:50 GMT</pubDate>
  <title>Why Do You Care?</title>
  <author>kylebee</author>
  <link>https://kylebee.livejournal.com/773509.html</link>
  <description>&lt;p style=&quot;border: 1px solid black; padding: 3px;&quot;&gt;&lt;strong&gt;Originally published at &lt;a href=&quot;http://www.kyleboddy.com/2011/02/08/why-do-you-care/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Kyle Boddy&lt;/a&gt;. You can comment here or &lt;a href=&quot;http://www.kyleboddy.com/2011/02/08/why-do-you-care/#comments&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;there&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;&quot;I can&apos;t imagine not caring.&quot;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;My friend and colleague Zac told me of this exchange that came from one of his short stories. Zac and I were discussing our busy schedules over beers at the local karaoke dive bar. For comparison&apos;s sake, Zac is a full-time game designer and could also be described by all of the following titles: Professional book editor, short story writer, screenplay writer, social networking site designer, published poet, political scientist, and literary critic. I&apos;m sure I&apos;ve left some titles out, but I think you get the point.&lt;/p&gt;
&lt;p&gt;We have almost no directly overlapping interests - I&apos;m a full-time programmer/developer and also could be described as an amateur biomechanics analyst and researcher, baseball coach, exercise scientist, game theorist, kinesiologist, physics student, pharmacology researcher, and economist. Worth noting, of course, is that I have very little formal education in most of those fields, and that I don&apos;t describe myself as a professional in any of them.&lt;/p&gt;
&lt;p&gt;Yet we share the most important thing that makes us such great friends - the passion for knowledge and deep research. We both intensely study fields that nearly everyone thinks are esoteric at best and a waste of time at worst. For Zac, this might be poetry, and for me, this is applied biomechanics as it relates to throwing a baseball (and nothing else). We both spend our &quot;down time&quot; watching world-class lectures on various subjects at &lt;strong&gt;Academic Earth &lt;/strong&gt;(I&apos;m currently watching &lt;a href=&quot;http://academicearth.org/courses/physics-i-classical-mechanics&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Walter Lewin&apos;s Physics I: Classical Mechanics series&lt;/a&gt; to better understand 3-D Kinematics and Vector decomposition; these are key factors when using Direct Linear Translation in biomechanical analysis) or idly thinking about new entrepreneurial ideas.&lt;/p&gt;
&lt;p&gt;Example: I just spent my lunch today listening to Jason Fried&apos;s TED Talk about &lt;a href=&quot;http://www.youtube.com/watch?v=5XD2kNopsUs&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Why Work Doesn&apos;t Happen At Work&lt;/a&gt; while picking at some chicken fingers from Whole Foods.&lt;/p&gt;
&lt;p&gt;In response to my announcement of the &lt;a href=&quot;http://elocube.kyleboddy.com/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Elo Cube project&lt;/a&gt;, someone on my Facebook wall asked me how I &quot;find time&quot; for all of these activities. I glibly responded that &quot;I hustle every day&quot; and &quot;work at least 60 hours per week.&quot; Today, I thought about it more at length and wanted to figure out how many hours per week I spend on activities that most people would consider either &quot;working&quot; or &quot;learning.&quot;&lt;/p&gt;
&lt;p&gt;In a typical week, I will spend:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;40 hours at my full-time job working as a developer, programmer, and business analyst&lt;/li&gt;
&lt;li&gt;10 hours training athletes at my facility&lt;/li&gt;
&lt;li&gt;5 hours researching general biomechanics/applied anatomy/kinesiology/exercise science&lt;/li&gt;
&lt;li&gt;5 hours watching lectures on Academic Earth or other open-courseware sites&lt;/li&gt;
&lt;li&gt;6 hours either writing code or thinking about code for my various projects (Elo Cube, Open Elo System, Biomechanics Database, Kindred Network Algorithm)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That adds up to about 66 hours of work in an average week, which is a bit lower than I suspected. Subtract 56 hours per week for sleeping and sleeping-related activities, 7.5 hours for commuting to/from my full-time job, and that leaves an average of 5.5 hours per day of &quot;free&quot; time. In those 5.5 hours, I personally train myself (though some of this overlaps with training my athletes), spend time with my wife Astrid, play some games (League of Legends, Magic: The Gathering) and try to do all the other errands that I&apos;m supposed to do (which I invariably fail at doing). As summer approaches, I will be playing baseball upwards of 12 hours per week, though I probably will cut back on that this year since I&apos;m having a kid in mid-July!&lt;/p&gt;
&lt;p&gt;This is turning into a rather large digression, but it&apos;s my blog, so whatever. Approximately ten years ago, my friend Liz asked me a seemingly innocent question: &quot;Kyle - are you good at everything you do?&quot; I proudly answered: &quot;Yes!&quot; It was a badge of honor to select things that I&apos;m good at and pursue them vigorously.&lt;/p&gt;
&lt;p&gt;Years went by and I forgot all about this exchange until it dawned on me about five years ago that &lt;strong&gt;this is not a good trait to have! &lt;/strong&gt;Sure, I was above-average in everything I took interest in, but I took interest in a very few things and this stupid limitation that I imposed on myself by refusing to do things that I wasn&apos;t good at was limiting my already eroding creativity and intelligence. While I wasn&apos;t the smartest guy on the planet and couldn&apos;t get inspired by fields I truly didn&apos;t understand - typically liberal arts related fields like literature, language, and sociology/psychology - I knew that I had some predisposition for understanding the scientific method. So it would be science that I would turn to in an attempt to be bad at some things while still maintaining interest.&lt;/p&gt;
&lt;p&gt;Since then, I&apos;ve applied my admittedly limited intelligence towards science-related fields. I&apos;m researching topics that I have no shot of being the best (or probably even above-average) at understanding: Classical Mechanics, Kinematics, Kinetics, Machine Learning, Computer Science, Kinesiology, Biomechanics, Exercise Science, and so forth. And let me tell you, when you have a stubborn ego and disposition like I do, there&apos;s a never-ending sea of knowledge to wade through on topics like &quot;Instantaneous Acceleration and it&apos;s Effect on UCL Rupture&quot; or &quot;Time-Measured Changes in Shoulder Flexibility and Pitching Kinematics in Youth Baseball Athletes,&quot; much less &quot;Jacques Distler&apos;s Critique of Garret&apos;s Lisi&apos;s Exceptionally Simple Theory of Everything&quot; which describes Lie algebra E8.&lt;/p&gt;
&lt;h3&gt;Bringing it back full circle...&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;&quot;Why do you care?&quot;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;As stated above, I can&apos;t imagine not caring about these topics. And I understand what it&apos;s like to not care about them, because just six years ago I was a troubled young adult who thought he was relatively intelligent but had nowhere to apply it to. This type of thinking is infectious and needs to be purged from the untold millions of 20-something year old graduates (or dropouts) out there. Everyone has a propensity to understand something in this world - be it science, literature, art, history, computers, or any other very broad field. By gradually getting into a field that you find interesting - perhaps you remember being intrigued by the &lt;em&gt;Winged Victory of Samothrace&lt;/em&gt;? - and looking at unsolved problems or complex concepts in that field, you will suddenly find yourself immersed in it.&lt;/p&gt;
&lt;p&gt;I personally can&apos;t understand how people can&apos;t watch ten minutes of Walter Lewin&apos;s physics lectures and not be instantly hooked! What got me was this simple line:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Any measurement that you make without knowledge of its uncertainty is completely meaningless.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Taken at face value, it&apos;s not that interesting. But think about the ramifications of that statement: It is perhaps an elegant and more detailed paraphrase of Richard Feynman&apos;s famous statement:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;I know how hard it is to know something.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;How interesting is it to think about calculating something like joint torque in biomechanics and understanding the crazy uncertainty around it! Acceleration is used to calculate joint torque, and acceleration is a second-order derivation of location. Think about all the potential for error in such a calculation, and realize that we&apos;re just talking about torque around a single joint in the body. Relate this to the rest of the world: How hard is it to &lt;strong&gt;truly know something&lt;/strong&gt; infinitely more complex, like the effect of gravity between two objects or why inertia is the way it is? (These are perhaps two unfair topics considering no one knows the definitive answer to both questions!)&lt;/p&gt;
&lt;p&gt;For me, the countless interactions in our world described by the most basic concepts of physics occupies my mind all the time. For you, it might be the indescribable nature of macro evolution or the creativity required to even conceive of the most beautiful songs we&apos;ve heard.&lt;/p&gt;
&lt;p&gt;There is no excuse for being intellectually bored or not caring about things in our world. We live in an age where information is plentiful and freely available from the most prestigious of sources on all sorts of topics. Think broadly and spend a &lt;strong&gt;single hour per week&lt;/strong&gt; thinking about this kind of thing, and I bet it will spiral into something ever more interesting to you. Cast aside your prejudices about who is and who is not &lt;em&gt;smart enough &lt;/em&gt;to study these subjects and just &lt;strong&gt;think&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The worst thing to happen to young people is the stigmatization of the question &quot;Why?&quot; Start asking yourself this question all the time. The speed at which you will realize you know nothing about the most basic interactions in our world is astounding, humbling, and altogether unbelievably amazing.&lt;/p&gt;
</description>
  <comments>https://kylebee.livejournal.com/773509.html?view=comments#comments</comments>
  <category>random thoughts</category>
  <lj:security>public</lj:security>
  <lj:reply-count>1</lj:reply-count>
  </item>
  <item>
  <guid isPermaLink='true'>https://kylebee.livejournal.com/773179.html</guid>
  <pubDate>Thu, 03 Feb 2011 21:15:32 GMT</pubDate>
  <title>Understand the Axis You Compete On</title>
  <author>kylebee</author>
  <link>https://kylebee.livejournal.com/773179.html</link>
  <description>&lt;p style=&quot;border: 1px solid black; padding: 3px;&quot;&gt;&lt;strong&gt;Originally published at &lt;a href=&quot;http://www.kyleboddy.com/2011/02/03/understand-the-axis-you-compete-on/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Kyle Boddy&lt;/a&gt;. You can comment here or &lt;a href=&quot;http://www.kyleboddy.com/2011/02/03/understand-the-axis-you-compete-on/#comments&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;there&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;A corollary to &quot;Focus on What Matters,&quot; understanding the axis you compete on is an important trait in any good entrepreneur. The inability to focus on the competitive edge that justifies your product or service&apos;s end cost has sunk many organizations in the critical stages of their development. I&apos;ve seen this time and time again and have been guilty of it myself on more than one occasion!&lt;/p&gt;
&lt;p&gt;We live in an increasingly more specialized society and economy - we no longer want a Virtual Private Server; we want an unmanaged VPS under $20/month running Fedora Core located in Dallas with 5 IP addresses and partial physical access through a ticketing system. We&apos;re not interested in hiring programmers/developers - we want a developer who specializes in MySQL design/administration, thorough understanding of Rails 3, and experience with Joomla, Drupal, and Magento.&lt;/p&gt;
&lt;p&gt;The failure to compete on an axis with a low barrier to entry is what ruins most small business ideas. However, for those small businesses that get off the ground and start competing in their niche, they eventually start to think bigger - and why not? There&apos;s nothing wrong with future planning for an entrepreneur; it is the hallmark of a smart businessman. The smart entrepreneur has an exit strategy and a general - if not malleable - 3-year plan for his organization.&lt;/p&gt;
&lt;p&gt;But don&apos;t confuse this future planning with the generalization of your niche; this is the death knell for most organizations that get too ambitious. Most small businesses dominate because they have low overhead, smart planning, patient executives, and most of all - completely rule their niche and everything that connects to it!&lt;/p&gt;
&lt;h4&gt;Example of the Failure to Understand the Relevant Axis of Competition&lt;/h4&gt;
&lt;p&gt;An organization I did some consulting for that fell for this trap: The small business was in the black year after year and experienced phenomenal growth because they were smart enough (and lucky enough) to pick an unexplored niche that would eventually blossom. Throughout the process, they accumulated a lot of technical debt even though the extent of the technology involved posting data from a web form to a database and manipulating that data on the back end for marketing/financial purposes. The response to the growing technical debt wasn&apos;t to simplify the process, but rather to expand and try and compete on the &lt;strong&gt;Axis of Technology&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;But this was a huge mistake - the company competed on the &lt;strong&gt;Axis of Marketing &lt;/strong&gt;and had a large economic &lt;strong&gt;First Mover &lt;/strong&gt;advantage. Remember, the entire extent of the technical interactions of the company involved posting data from a web form, storing it into a database, and manipulating said data. Marketing specialists tracked SEO-related data and made projections from these posts and sales people used the data to show off the dominance of the company in this small industry. To make such a huge paradigm shift in an attempt to compete on the &lt;strong&gt;Axis of Technology&lt;/strong&gt; made no sense - the company did not succeed because of its superior technology department, but rather because of the first mover advantage and a solid foundation of sales/marketing.&lt;/p&gt;
&lt;p&gt;They ported their technology to a more complicated and expensive platform, changing the base language everything was programmed in, and completely overhauled the existing database, requiring a giant migration of the data to the new schema. They hired all new developers and executive staff to oversee the change, leaving the Sales and Marketing departments in the dust - making huge promises that could never be met due to the technical debt that had accumulated and the problems that would invariably crop up as a result of trying to migrate millions of rows of poorly laid-out data into a brand new invented schema.&lt;/p&gt;
&lt;p&gt;The organization was able to make these changes because they promised the moon to the business units - unification of tools, better access to data, and faster reports!&lt;/p&gt;
&lt;p&gt;It didn&apos;t happen: The migration was an enormous failure, the implementation of a more complicated programming foundation flopped, the tools became worse, and sales have been steadily dropping while company morale plunged.&lt;/p&gt;
&lt;p&gt;Due to the fractured database structure, the organization now maintains a legacy database and a post-migration database - both of which have differing schemas and do not blend whatsoever. Their products exist on two platforms and all new employees must learn two separate systems, both of which have rapid changes inflicted on them due to exponentially-increasing technical debt.&lt;/p&gt;
&lt;p&gt;All of this happened because the organization failed to understand what axis it competed on, and tried to get too fancy. In this age of specialization, right-pricing, and cheap outsourced labor, you simply cannot afford to make these types of mistakes and hope to remain relevant - or even solvent - in today&apos;s economy.&lt;/p&gt;
</description>
  <comments>https://kylebee.livejournal.com/773179.html?view=comments#comments</comments>
  <category>focus on what matters</category>
  <category>competition axis</category>
  <category>consulting</category>
  <category>entrepreneurship</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
  </item>
  <item>
  <guid isPermaLink='true'>https://kylebee.livejournal.com/772902.html</guid>
  <pubDate>Mon, 17 Jan 2011 20:44:16 GMT</pubDate>
  <title>array_walk() in CodeIgniter</title>
  <author>kylebee</author>
  <link>https://kylebee.livejournal.com/772902.html</link>
  <description>&lt;p style=&quot;border: 1px solid black; padding: 3px;&quot;&gt;&lt;strong&gt;Originally published at &lt;a href=&quot;http://www.kyleboddy.com/2011/01/17/array_walk-in-codeigniter/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Kyle Boddy&lt;/a&gt;. You can comment here or &lt;a href=&quot;http://www.kyleboddy.com/2011/01/17/array_walk-in-codeigniter/#comments&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;there&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Recently I needed to call &lt;em&gt;trim()&lt;/em&gt; for multiple variables in an array in my CodeIgniter application, but had issues with calling the custom function using &lt;em&gt;array_walk()&lt;/em&gt; to do so. A bit of Googling and experimentation led me to this answer:&lt;/p&gt;
&lt;pre class=&quot;&quot; title=&quot;&quot;&gt;
function stuff()
    {
	    // trim array data
	    array_walk($data, array($this, &apos;trim_value&apos;));

	    $this-&amp;gt;load-&amp;gt;view(&apos;preview_view&apos;, $data);
	}

	function trim_value(&amp;amp;$value)
	{
	    $value = trim($value);
	}
&lt;/pre&gt;
&lt;p&gt;You have to pass &lt;em&gt;array_walk() &lt;/em&gt;or &lt;em&gt;array_walk_recursive() &lt;/em&gt;an array with $this as a defined variable/pointer.&lt;/p&gt;
&lt;p&gt;Try that piece of code if you&apos;re having an issue!&lt;/p&gt;
</description>
  <comments>https://kylebee.livejournal.com/772902.html?view=comments#comments</comments>
  <category>array_walk()</category>
  <category>codeigniter</category>
  <category>php</category>
  <category>software development</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
  </item>
  <item>
  <guid isPermaLink='true'>https://kylebee.livejournal.com/772785.html</guid>
  <pubDate>Sun, 02 Jan 2011 21:08:20 GMT</pubDate>
  <title>Workout Programming: Smolov Jr.</title>
  <author>kylebee</author>
  <link>https://kylebee.livejournal.com/772785.html</link>
  <description>&lt;p style=&quot;border: 1px solid black; padding: 3px;&quot;&gt;&lt;strong&gt;Originally published at &lt;a href=&quot;http://www.kyleboddy.com/2011/01/02/workout-programming-smolov-jr/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Kyle Boddy&lt;/a&gt;. You can comment here or &lt;a href=&quot;http://www.kyleboddy.com/2011/01/02/workout-programming-smolov-jr/#comments&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;there&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;A friend of mine asked me about trying to work the Smolov Jr. bench program (split into 3x/week over 4 weeks) into a regular training schedule. I put a fair amount of thought into it and figured that I&apos;d share it. Here is the exchange:&lt;/p&gt;
&lt;blockquote&gt;
&lt;div&gt;Kyle,&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;If you don&apos;t mind, I&apos;d like to ask you a few questions on Smolov - specifically how it impacted recovery for the squat/deadlift.&lt;/div&gt;
&lt;div&gt;I&apos;ve decided that enough is enough re: Show and Go. The program itself is fine, but I feel as if I&apos;ve been stagnating big time on both lower body lifts. My bench has also stayed the same. Part of this is due to failing to eat enough to gain weight, and part has been some poor efforts in the gym, but in any event, a change probably needs to be made.&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;...&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;I&apos;ll be squatting 2x/week - likely one time for speed and once a week where I&apos;ll work up to a heavy single.&lt;/div&gt;
&lt;/blockquote&gt;
&lt;div&gt;This seems like a good program to maintain squat strength at your bodyweight; that is pretty much my plan when it comes to in-season squat programming. Speed work / heavy triples. Is that your goal? You won&apos;t drive much upwards progress in the squat with this type of program due to lack of volume.&lt;/div&gt;
&lt;blockquote&gt;
&lt;div&gt;&lt;strong&gt;Tuesday&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;DE Squats, Smolov Workout #1, DB Incline, Chins, KB Swings, Abs&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;Wednesday&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;Smolov Bench #2, JM Press, Pushups, Row Variation (either chest supported or cable)&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;Friday&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;Deadlift, Squat, Chins, GHR, Abs&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;Saturday&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;Smolov Bench #3, Push Press, DB Row, BB Curls&lt;/div&gt;
&lt;/blockquote&gt;
&lt;div&gt;Smolov Bench #3 just one day after ME DL/SQ workouts + chins/pull-ups is going to be very hard, especially if you are at your upper novice limit of bench progression (while I wasn&apos;t). I strongly prefer a Sunday/Tuesday/Thursday/Friday schedule where you have at least one day off between workouts; and scheduling your ME DL on Tuesday (surrounded by fresh days).&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;I think you would do well to maintain progress (or gain slight progress) on the SQ while you attempt to drive bench/DL progression. Squat strength is something to focus on as a primary target and costs a lot in terms of training economy and recovery; the main secondary benefit of that type of programming is that your pulling strength will go up without much DL work. IMO you either focus on improving squat strength or maintaining it, and if you maintain it, you can focus on one other type of training goal (endurance, bench strength, weight loss, etc). Recovery is not a pitcher of water you pour into various body parts, but you knew that already.&lt;/div&gt;
&lt;div&gt;Hope that insight helps you some for what it&apos;s worth.&lt;/div&gt;
</description>
  <comments>https://kylebee.livejournal.com/772785.html?view=comments#comments</comments>
  <category>personal training</category>
  <category>training economy</category>
  <category>smolov jr</category>
  <lj:security>public</lj:security>
  <lj:reply-count>1</lj:reply-count>
  </item>
  <item>
  <guid isPermaLink='true'>https://kylebee.livejournal.com/772409.html</guid>
  <pubDate>Mon, 13 Dec 2010 22:49:11 GMT</pubDate>
  <title>The Universe Is&amp;#8230;</title>
  <author>kylebee</author>
  <link>https://kylebee.livejournal.com/772409.html</link>
  <description>&lt;p style=&quot;border: 1px solid black; padding: 3px;&quot;&gt;&lt;strong&gt;Originally published at &lt;a href=&quot;http://www.kyleboddy.com/2010/12/13/the-universe-is/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Kyle Boddy&lt;/a&gt;. You can comment here or &lt;a href=&quot;http://www.kyleboddy.com/2010/12/13/the-universe-is/#comments&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;there&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Phil_Plait_the_Universe_is_Cool.jpg/672px-Phil_Plait_the_Universe_is_Cool.jpg&quot; rel=&quot;lightbox[304]&quot; title=&quot;The Universe Is...&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;&quot; title=&quot;The Universe Is...&quot; src=&quot;https://upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Phil_Plait_the_Universe_is_Cool.jpg/672px-Phil_Plait_the_Universe_is_Cool.jpg&quot; alt=&quot;&quot; width=&quot;672&quot; height=&quot;600&quot; fetchpriority=&quot;high&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
</description>
  <comments>https://kylebee.livejournal.com/772409.html?view=comments#comments</comments>
  <category>humor</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
  </item>
  <item>
  <guid isPermaLink='true'>https://kylebee.livejournal.com/772275.html</guid>
  <pubDate>Sun, 07 Nov 2010 23:40:11 GMT</pubDate>
  <title>Merging Two Arrays of Different Size (PHP)</title>
  <author>kylebee</author>
  <link>https://kylebee.livejournal.com/772275.html</link>
  <description>&lt;p style=&quot;border: 1px solid black; padding: 3px;&quot;&gt;&lt;strong&gt;Originally published at &lt;a href=&quot;http://www.kyleboddy.com/2010/11/07/merging-two-arrays-of-different-size-php/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Kyle Boddy&lt;/a&gt;. You can comment here or &lt;a href=&quot;http://www.kyleboddy.com/2010/11/07/merging-two-arrays-of-different-size-php/#comments&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;there&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;This isn&apos;t pretty, but I needed to write code that would merge two arrays of differing sizes. One contained injury information for 1400 players with an overlapping field of &lt;em&gt;elias_id&lt;/em&gt; with an array of 900 players of PITCHf/x data. Simply put, I needed to insert two values from the injury array to matching players in the PITCHf/x array.&lt;/p&gt;
&lt;p&gt;Here&apos;s how I did it with &lt;em&gt;array_search()&lt;/em&gt; and &lt;em&gt;preg_replace() &lt;/em&gt;- the arrays were in the format of &lt;strong&gt;$pitcher[&apos;elias_idxxx&apos;]&lt;/strong&gt; where xxx was the numeric point at which the value was in (so elias_id0 through elias_id899 for the PITCHf/x array and elias_id0 through elias_id1399 for the injury array).&lt;/p&gt;
&lt;p&gt;Whether or not the arrays are properly formatted and constructed is not the point of this blog post. (Though it is likely that it is better done through a second recursive array, we&apos;re not selling code here. We&apos;re selling functionality.)&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;
$x = 0;
$y = 0;
$pattern = &apos;/[^0-9]/&apos;;

if (!@$pitcher){
	// do nothing
}
else // parse the array
{
	foreach($pitcher as $blank)
	{
		$key = array_search($pitcher[&apos;elias_id&apos; . $x], $injuries);
		if ($key)
			{
				$y = preg_replace($pattern, &apos;&apos;, $key);
				$pitcher[&apos;timesinjured&apos; . $x] = $injuries[&apos;timesinjured&apos; . $y];
				$pitcher[&apos;daysmissed&apos; . $x] = $injuries[&apos;daysmissed&apos; . $y];
			}
		$x++;
		if (!@$pitcher[&apos;elias_id&apos; . $x])
			break;
	}
}
&lt;/pre&gt;
</description>
  <comments>https://kylebee.livejournal.com/772275.html?view=comments#comments</comments>
  <category>php</category>
  <category>pitchf/x</category>
  <category>software development</category>
  <category>hacking</category>
  <category>injuries</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
  </item>
  <item>
  <guid isPermaLink='true'>https://kylebee.livejournal.com/772006.html</guid>
  <pubDate>Wed, 27 Oct 2010 22:02:19 GMT</pubDate>
  <title>PITCHf/x Database Issues: Duplicate Entry for Key</title>
  <author>kylebee</author>
  <link>https://kylebee.livejournal.com/772006.html</link>
  <description>&lt;p style=&quot;border: 1px solid black; padding: 3px;&quot;&gt;&lt;strong&gt;Originally published at &lt;a href=&quot;http://www.kyleboddy.com/2010/10/27/pitchfx-database-issues-duplicate-entry-for-key/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Kyle Boddy&lt;/a&gt;. You can comment here or &lt;a href=&quot;http://www.kyleboddy.com/2010/10/27/pitchfx-database-issues-duplicate-entry-for-key/#comments&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;there&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;If you&apos;re trying to build a PITCHf/x database like I am, you are probably heavily leaning on &lt;a href=&quot;http://fastballs.wordpress.com/2010/04/18/a-pitchfx-primer/&quot; target=&quot;_blank&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Mike Fast&apos;s work&lt;/a&gt;. It&apos;s a great primer, however, that&apos;s exactly how it should be viewed: A primer. There are numerous things that have changed since he initially wrote the page, and it&apos;s not a simple copy/paste job to download all the data from MLBAM. Among the issues are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Inadequate handling of timeouts from gd.mlb.com and gd2.mlb.com&lt;/li&gt;
&lt;li&gt;Hardcoding the IP is not a valid suggestion and causes lots of problems (suggested to get around DNS resolution issues)&lt;/li&gt;
&lt;li&gt;Parser script does not know how to figure out which games have been used without manually querying each at bat (expensive and unnecessary)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Database structure is not future-proof&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I could write for hours on the first three (plus other bugs), but I didn&apos;t document them well enough and it&apos;s simply not that interesting to me to write about script bugs that people should learn how to fix for themselves. If used verbatim, Mike&apos;s database structure will fail around July 2010 when inputting new pitches and at-bats into the database. You&apos;ll get errors like the following:&lt;/p&gt;
&lt;div class=&quot;&quot; style=&quot;width:650px&quot;&gt;&lt;a href=&quot;http://www.kyleboddy.com/wp-content/uploads/2010/10/pitchfx_errors.jpg&quot; rel=&quot;lightbox[256]&quot; title=&quot;pitchfx_errors&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;&quot; title=&quot;pitchfx_errors&quot; src=&quot;https://imgprx.livejournal.net/7d94806bfd5cb7fd25d2021f2b9911860bc6974c275ffd6f27fb53124cc93837/P2WlxyVijxKvg29s8slTUEMdsf-ah7h0yFmVCblKg9XR_BzQjI-mB0dpF1c6HUJ_okdbiHLLcw9KHFYf0kprrhZA2ieAKOCV7lJWvC5kOADjAfDXvNFJy3A:yK_VFH_2bImU2HYClsXJXQ&quot; alt=&quot;PITCHf/x Errors - Parsing&quot; width=&quot;640&quot; height=&quot;497&quot; fetchpriority=&quot;high&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;&quot;&gt;Yes, this is my Windows box.&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;I&apos;ve inserted a bunch of &lt;em&gt;print&lt;/em&gt; statements to help me debug the code (ah, &lt;a href=&quot;http://www.facebook.com/pages/printf-style-debugging/262337355792&quot; target=&quot;_blank&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;printf-style debugging&lt;/a&gt;) and saw that it was reporting duplicate or unknown key entries. Recalling the little I know about MySQL and the numbers involved (513425 and later 1900131), I was pretty sure that this is typical behavior when a memory space is overloaded. In this case, Mike uses MEDIUMINT(8) to describe the primary key of &lt;em&gt;ab_id&lt;/em&gt; in the code.&lt;/p&gt;
&lt;p&gt;If you have phpmyadmin (and you should), you can fix this problem rather easily by editing the structure of the table to change &lt;em&gt;ab_id&lt;/em&gt; to INT(10) in both the &lt;strong&gt;pitches&lt;/strong&gt; and &lt;strong&gt;atbats&lt;/strong&gt; tables. Additionally, you need to change&lt;em&gt; pitch_id&lt;/em&gt; in &lt;strong&gt;pitches&lt;/strong&gt; to an INT(10). This will allow for larger numbers to be stored in those rows.&lt;/p&gt;
&lt;div class=&quot;&quot; style=&quot;width:540px&quot;&gt;&lt;a href=&quot;http://www.kyleboddy.com/wp-content/uploads/2010/10/dbscreenshot.jpg&quot; rel=&quot;lightbox[256]&quot; title=&quot;dbscreenshot&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;&quot; title=&quot;dbscreenshot&quot; src=&quot;https://imgprx.livejournal.net/9872dc70669983c4803969c2300ae23836a40f1a51a63d8e7f9c2deb34760c62/P2WlxyVijxKvg29s8slTUEMdsf-ah7h0yFmVCblKg9XR_BzQjI-mB0dpF1c6HUJ_okdbiHLLcw9KHFYf0kprrhZA2ieAPOuS7khVoR9yIh34XemJsYNT:uGXtaKaV6os9DxZjqQ0Hng&quot; alt=&quot;phpmyadmin PITCHf/x&quot; width=&quot;530&quot; height=&quot;150&quot; loading=&quot;lazy&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;&quot;&gt;phpmyadmin - Where to edit your PITCHf/x database (click for larger)&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;If you don&apos;t use phpmyadmin, the MySQL code to execute at the command line is something like:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;ALTER TABLE pitches MODIFY ab_id INT(10);&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Good luck with your PITCHf/x database building!&lt;/p&gt;
</description>
  <comments>https://kylebee.livejournal.com/772006.html?view=comments#comments</comments>
  <category>perl</category>
  <category>mysql</category>
  <category>mike fast</category>
  <category>baseball</category>
  <category>pitchf/x database</category>
  <category>hacking</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
  </item>
  <item>
  <guid isPermaLink='true'>https://kylebee.livejournal.com/771751.html</guid>
  <pubDate>Sun, 24 Oct 2010 10:01:08 GMT</pubDate>
  <title>New Web Project: Advanced Baseball Injury Database</title>
  <author>kylebee</author>
  <link>https://kylebee.livejournal.com/771751.html</link>
  <description>&lt;p style=&quot;border: 1px solid black; padding: 3px;&quot;&gt;&lt;strong&gt;Originally published at &lt;a href=&quot;http://www.kyleboddy.com/2010/10/24/new-web-project-advanced-baseball-injury-database/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Kyle Boddy&lt;/a&gt;. You can comment here or &lt;a href=&quot;http://www.kyleboddy.com/2010/10/24/new-web-project-advanced-baseball-injury-database/#comments&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;there&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;&lt;div class=&quot;&quot; style=&quot;width:514px&quot;&gt;&lt;a href=&quot;http://imgur.com/QBy3c.jpg&quot; rel=&quot;lightbox[252]&quot; title=&quot;Concept Image&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;&quot; title=&quot;Concept Image&quot; src=&quot;https://imgur.com/QBy3c.jpg&quot; alt=&quot;&quot; width=&quot;504&quot; height=&quot;351&quot; fetchpriority=&quot;high&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;&quot;&gt;Concept Image&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;I&apos;m developing a web application that is similar in function to both PITCHf/x and injury-related databases out there. However, it will combine both types of data in hopes of performing some advanced searches not currently offered by any of the main free sources of information (Corey Dawkins&apos; Baseball Injury Tool, Fangraphs data, Trip Somers&apos; PITCHf/x tool, etc).&lt;/p&gt;
&lt;p&gt;The &quot;complete&quot; application allows you to search for peak/average velocities, average release point, average number of pitches thrown per appearance, number of appearances per year, and other variables. For logged-in members, you will see an animated image of a pitcher&apos;s mechanics if it is available in the database, and if it is not, you will be able to donate a small amount of money ($10-20) to have said pitcher&apos;s mechanics digitized, added to the database, and a sponsored link with your name/group of choice added to the page.&lt;/p&gt;
&lt;p&gt;With luck, people will be able to come up with some interesting combinatorial analysis that might correlate some PITCHf/x values with real-world injuries in pitchers. Plug-ins using &lt;em&gt;jpgraph&lt;/em&gt; to utilize the power of R and general statistical analysis will be available in the Advanced Combination Search.&lt;/p&gt;
</description>
  <comments>https://kylebee.livejournal.com/771751.html?view=comments#comments</comments>
  <category>baseball</category>
  <category>injury database</category>
  <category>software development</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
  </item>
  <item>
  <guid isPermaLink='true'>https://kylebee.livejournal.com/771443.html</guid>
  <pubDate>Thu, 21 Oct 2010 09:48:45 GMT</pubDate>
  <title>Fun With Biomechanics: Control Object</title>
  <author>kylebee</author>
  <link>https://kylebee.livejournal.com/771443.html</link>
  <description>&lt;p style=&quot;border: 1px solid black; padding: 3px;&quot;&gt;&lt;strong&gt;Originally published at &lt;a href=&quot;http://www.kyleboddy.com/2010/10/21/fun-with-biomechanics-control-object/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Kyle Boddy&lt;/a&gt;. You can comment here or &lt;a href=&quot;http://www.kyleboddy.com/2010/10/21/fun-with-biomechanics-control-object/#comments&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;there&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Cross-posted from my baseball training site - &lt;a href=&quot;http://www.drivelinebaseball.com/2010/10/21/biomechanics-control-object-completed/&quot; target=&quot;_blank&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Driveline Baseball&lt;/a&gt;:&lt;/p&gt;
&lt;div class=&quot;&quot; style=&quot;width:510px&quot;&gt;&lt;a href=&quot;http://farm2.static.flickr.com/1422/5101778768_49193b38c3.jpg&quot; rel=&quot;lightbox[246]&quot; title=&quot;Kyle @ NSBA - Control Object Completed&quot; target=&quot;_blank&quot;&gt;&lt;img title=&quot;Kyle @ NSBA - Control Object Completed&quot; src=&quot;https://farm2.static.flickr.com/1422/5101778768_49193b38c3.jpg&quot; alt=&quot;Kyle @ NSBA - Control Object Completed&quot; width=&quot;500&quot; height=&quot;281&quot; fetchpriority=&quot;high&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;&quot;&gt;Kyle @ NSBA - Control Object Completed&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Building the first-ever private baseball biomechanics lab on a budget of $1,000 is my greatest hack yet.&lt;/p&gt;
</description>
  <comments>https://kylebee.livejournal.com/771443.html?view=comments#comments</comments>
  <category>biomechanics</category>
  <category>hacking</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
  </item>
  <item>
  <guid isPermaLink='true'>https://kylebee.livejournal.com/771144.html</guid>
  <pubDate>Thu, 14 Oct 2010 10:05:19 GMT</pubDate>
  <title>WordPress Code: Attachment / Category Loop</title>
  <author>kylebee</author>
  <link>https://kylebee.livejournal.com/771144.html</link>
  <description>&lt;p style=&quot;border: 1px solid black; padding: 3px;&quot;&gt;&lt;strong&gt;Originally published at &lt;a href=&quot;http://www.kyleboddy.com/2010/10/14/wordpress-code-attachment-category-loop/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Kyle Boddy&lt;/a&gt;. You can comment here or &lt;a href=&quot;http://www.kyleboddy.com/2010/10/14/wordpress-code-attachment-category-loop/#comments&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;there&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;&lt;div class=&quot;&quot; style=&quot;width:360px&quot;&gt;&lt;a href=&quot;http://www.kyleboddy.com/wp-content/uploads/2010/10/wordpress-logo-stacked-rgb.png&quot; rel=&quot;lightbox[198]&quot; title=&quot;Wordpress Logo&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;&quot; title=&quot;Wordpress Logo&quot; src=&quot;https://imgprx.livejournal.net/c12c2b446896d45b12c73969426954f5dead286abea8dd511e672cc1efe220d3/P2WlxyVijxKvg29s8slTUEMdsf-ah7h0yFmVCblKg9XR_BzQjI-mB0dpF1c6HUJ_okdbiHLLcw9KHFYf0kprrhZA2ieAL-aT6UpCoQJyZx7jFOzUpdVPimZVul9gZmlX4Ea7tH4:lhfH-URRfZNdXEsXA89cVw&quot; alt=&quot;Wordpress Logo&quot; width=&quot;350&quot; height=&quot;217&quot; fetchpriority=&quot;high&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;&quot;&gt;Wordpress!&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Recently while writing some PHP/WordPress code for a client of mine, I ran into an interesting situation. The previous developer had some godawful code that I won&apos;t get into right now, but the client wanted to be able to display the following on a static page:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Groups of areas where his business did work&lt;/li&gt;
&lt;li&gt;Blog posts in those groups (testimonials / examples of previous jobs)&lt;/li&gt;
&lt;li&gt;The first image attached to each blog post as a thumbnail, linking back to the original blog post&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I had never done something like this before with WordPress, but it&apos;s actually fairly simple, as WP is quite powerful. After finding out that all the images were the same aspect ratio (phew!), I decided on writing a loop that would have only two arrays of hard-coded data. These arrays would: 1) Define the areas that his business did work, and 2) Match the category slugs that WP uses.&lt;/p&gt;
&lt;p&gt;My client agreed to post his work to categories that were matched to the groups of areas where his business did work. As such, I defined two arrays with the same number of items in the same order that matched the description and the category slug for each group. This might be better off in a single nested array with multiple key-value pairs, but I think this is a simple solution that scales well and can be modified easily at any time.&lt;/p&gt;
&lt;p&gt;Here&apos;s the code:&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;
 &amp;lt;?php
 $areas = array(1 =&amp;gt; &apos;Seattle&apos;,&apos;East Side &amp;amp; Mercer Island&apos;,&apos;North Side&apos;,&apos;South Side&apos;);
 $slugs = array(1 =&amp;gt; &apos;seattle-jobs&apos;,&apos;east-side-and-mercer-island-jobs&apos;,&apos;north-end-jobs&apos;,&apos;south-end-and-west-seattle-jobs&apos;);
 $i = count($areas);
 $n = 1;

 while ($n &amp;lt;= $i)
 {
     global $post;
     $myposts = get_posts(&apos;numberposts=-1&amp;amp;offset=0&amp;amp;category_name=&apos; . $slugs[$n]);
     echo &apos;&amp;lt;div id=&amp;quot;imageList&amp;quot;&amp;gt;&apos;;
     echo &apos;&amp;lt;a name=&amp;quot;&apos; . $areas[$n] . &apos;&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;h2&amp;gt;&apos; . $areas[$n] . &apos;&amp;lt;/h2&amp;gt;&apos;;
     echo &apos;&amp;lt;table id=&amp;quot;ourwork&amp;quot;&amp;gt;&amp;lt;tr&amp;gt;&apos;;
     $x = 1;

     foreach($myposts as $post)
     {
       setup_postdata($post);

        echo &apos;&amp;lt;td&amp;gt;&apos;;
        $args = array(
                &apos;post_type&apos; =&amp;gt; &apos;attachment&apos;,
                &apos;numberposts&apos; =&amp;gt; &apos;-1&apos;,
                &apos;post_status&apos; =&amp;gt; null,
                &apos;post_parent&apos; =&amp;gt; $post-&amp;gt;ID
        );
        $attachments = get_posts($args);

        if ($attachments) {
                    $y = count($attachments);
                    $y--;
                    echo &apos;&amp;lt;a href=&amp;quot;&apos; . $post-&amp;gt;guid . &apos;&amp;quot;&amp;gt;&apos;;
                    echo wp_get_attachment_image($id = $attachments[$y]-&amp;gt;ID, $size=array(200,133), $icon = false);
                    echo &apos;&amp;lt;strong&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&apos;;
                    echo apply_filters(&apos;the_title&apos;, $attachments[$y]-&amp;gt;post_title);
                    echo &apos;&amp;lt;/strong&amp;gt;&amp;lt;/a&amp;gt;&apos;;
                    echo &apos;&amp;lt;/td&amp;gt;&apos;;
                    if ($x == 4)
                    {
                        echo &apos;&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&apos;;
                        $x = 0;
                    }
                    $x++;
                }
     }
    echo &apos;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&apos;;
    echo &apos;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;blog&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&apos;;
    $n++;
  }
?&amp;gt;
&lt;/pre&gt;
&lt;p&gt;As you can see, I defined the arrays to start at 1 for simpler counting.  After that, it prints out the category&apos;s name in a header tag, defines a table and anchor (this was tied into another imagemap project), and runs a &lt;em&gt;foreach&lt;/em&gt; to get all the posts under the first slug in the &lt;strong&gt;$slugs&lt;/strong&gt; array. In the &lt;em&gt;foreach &lt;/em&gt;loop, it finds all posts with at least one attachment to it, counts the number of attachments, and uses the first attachment in the post to print out as an image with the title of it right below it - both linked to the original blog post.&lt;/p&gt;
&lt;p&gt;It then increments up to four times per line for formatting purposes, then kicks out and starts a new table row.&lt;/p&gt;
&lt;p&gt;For future expansion, all that needs to be done is adding, removing, or changing the paired &lt;strong&gt;$areas&lt;/strong&gt; and &lt;strong&gt;$slugs&lt;/strong&gt; to run together.&lt;/p&gt;
&lt;p&gt;Right now the client only has 50-80 entries, so it all fits fine with minor scrolling (plus the aforementioned imagemap from the home page shortcuts you to the correct anchor). However, in the future, it may get unwieldy. Using a Javascript show/hide function will probably be my next project and is simple to implement. It can even be tied in with the anchors from the imagemap by using the &lt;strong&gt;$_GET&lt;/strong&gt; function in PHP to pass that variable along, ensuring that only that category opens up while the rest stay hidden (at no penalty to SEO, I might add).&lt;/p&gt;
&lt;p&gt;Pretty fun piece of code. It took me about 5-6 hours to research and put together. Hope it helps you!&lt;/p&gt;
</description>
  <comments>https://kylebee.livejournal.com/771144.html?view=comments#comments</comments>
  <category>php</category>
  <category>wordpress</category>
  <category>software development</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
  </item>
  <item>
  <guid isPermaLink='true'>https://kylebee.livejournal.com/770954.html</guid>
  <pubDate>Fri, 08 Oct 2010 07:53:02 GMT</pubDate>
  <title>So Much Progress</title>
  <author>kylebee</author>
  <link>https://kylebee.livejournal.com/770954.html</link>
  <description>&lt;p style=&quot;border: 1px solid black; padding: 3px;&quot;&gt;&lt;strong&gt;Originally published at &lt;a href=&quot;http://www.kyleboddy.com/2010/10/08/so-much-progress/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Kyle Boddy&lt;/a&gt;. You can comment here or &lt;a href=&quot;http://www.kyleboddy.com/2010/10/08/so-much-progress/#comments&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;there&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;This image represents so much progress with regard to my motion capture lab. This is how boring I&apos;ve become.&lt;/p&gt;
&lt;div class=&quot;&quot; style=&quot;width:347px&quot;&gt;&lt;a href=&quot;http://www.kyleboddy.com/wp-content/uploads/2010/10/control_object.jpg&quot; rel=&quot;lightbox[195]&quot; title=&quot;control_object&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;&quot; title=&quot;control_object&quot; src=&quot;https://imgprx.livejournal.net/a2b9f994fec50edf57c8d7323c33f69e735a82a9f6409714576133cd6a221511/P2WlxyVijxKvg29s8slTUEMdsf-ah7h0yFmVCblKg9XR_BzQjI-mB0dpF1c6HUJ_okdbiHLLcw9KHFYf0kprrhZA2ieAO-aP-UhfqC5uKBjpEPfXvNFJy3A:L1ma6vnsJ2IOPn1-hI2f-A&quot; alt=&quot;control_object&quot; width=&quot;337&quot; height=&quot;332&quot; fetchpriority=&quot;high&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;&quot;&gt;Exciting.&lt;/p&gt;&lt;/div&gt;
</description>
  <comments>https://kylebee.livejournal.com/770954.html?view=comments#comments</comments>
  <category>biomechanics</category>
  <category>hacking</category>
  <category>control object</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
  </item>
  <item>
  <guid isPermaLink='true'>https://kylebee.livejournal.com/770750.html</guid>
  <pubDate>Tue, 05 Oct 2010 08:31:35 GMT</pubDate>
  <title>Hacking: What it Means to Me</title>
  <author>kylebee</author>
  <link>https://kylebee.livejournal.com/770750.html</link>
  <description>&lt;p style=&quot;border: 1px solid black; padding: 3px;&quot;&gt;&lt;strong&gt;Originally published at &lt;a href=&quot;http://www.kyleboddy.com/2010/10/05/hacking-what-it-means-to-me/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Kyle Boddy&lt;/a&gt;. You can comment here or &lt;a href=&quot;http://www.kyleboddy.com/2010/10/05/hacking-what-it-means-to-me/#comments&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;there&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;&lt;div class=&quot;&quot; style=&quot;width:410px&quot;&gt;&lt;a href=&quot;http://www.kyleboddy.com/wp-content/uploads/2010/10/hacker.jpg&quot; rel=&quot;lightbox[182]&quot; title=&quot;Hacker&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;&quot; title=&quot;Hacker&quot; src=&quot;https://imgprx.livejournal.net/8f29c2dab8cf9b6492b832d9d9601ee8c1eb7bbb3e5a1031da635dcd63a40e9a/P2WlxyVijxKvg29s8slTUEMdsf-ah7h0yFmVCblKg9XR_BzQjI-mB0dpF1c6HUJ_okdbiHLLcw9KHFYf0kprrhZA2ieAMOiC5l9C6htxLVDx:0sN9EEOE6Z72o6pW8oMM6A&quot; alt=&quot;Hacker&quot; width=&quot;400&quot; height=&quot;300&quot; fetchpriority=&quot;high&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;&quot;&gt;I should buy this.&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Hacking is a subject that is near and dear to my heart. I grew up a social outcast who embraced technology. My family did not come from very rich means, but we lived a typical average American life: Two parents (still together), three boys, placed in the suburbs of a Midwestern city, with pets coming and going. Given that my love for technology came about at an early age (I loved to play Nintendo and even preferred Atari/Bally game systems at times; I adopted the Internet far later than my friends in favor of local BBSes like &lt;strong&gt;Virtual Arcade&lt;/strong&gt;), it wasn&apos;t economically feasible to own modern computer equipment at that time. Younger readers of this blog post may not remember, but computers then were exorbitantly expensive and going through a very rapid evolutionary pace. I learned command-line BASIC on Apple IIe computers and very occasionally got to use a friend&apos;s 486 computer to play Doom on and surf the web (which was pretty darn boring back then).&lt;/p&gt;
&lt;p&gt;As I grew older, my parents purchased a state-of-the-art computer system with 17&quot; monitor (you have no idea how rare this was then), a Pentium 100 Mhz CPU, 1 GB hard drive (also unbelievably large), and 64 MB of RAM if I recall correctly. This Gateway 2000-branded machine probably set them back over $3,000, as my father pulled out all the stops one Christmas for us. It was nothing short of an amazing product, and completely out of left field - my parents didn&apos;t lavish expensive gifts on us (my grandfather tended to), so this was quite rare.&lt;/p&gt;
&lt;p&gt;I got in my fair share of trouble with it, but the intellectual curiosity of hacking was always there. Programming, not so much - my father bought me Visual Basic 4 one Christmas at my constant nagging, but I never ended up doing much with it. I learned much later in life that programming only interested me if it involved a project that I had to complete myself - writing lines of code to satisfy someone else&apos;s ideas or basic examples in a book were no more exciting to me than memorizing poetry.&lt;/p&gt;
&lt;p&gt;I recently saw &lt;em&gt;The Social Network&lt;/em&gt;, also known as &lt;em&gt;The Facebook Movie&lt;/em&gt;. My first reaction to the trailers were: &quot;Oh great, the Facebook movie. I don&apos;t want to see this.&quot; However, Zuckerberg&apos;s background was sufficiently interesting to me, and the people I went with were very good friends, so I decided not to shut it out for no real good reason. There were many times I uncontrollably smiled throughout the movie - when Zuckerberg&apos;s hacker mind is being spoken via narration as he frantically hammers out line after line of Perl to download and scrape pictures from Harvard&apos;s various repositories; when Eduardo and he discuss the algorithm to rank women on campus (a variation of the Elo system used in Chess and &lt;em&gt;Magic: The Gathering&lt;/em&gt;); the blurred poster of the &lt;em&gt;Hacker&apos;s Manifesto&lt;/em&gt; posted above his dorm room desk; and the code-off where he makes interns take shots for every 10th line of code they write (a genius idea - &lt;strong&gt;that&apos;s&lt;/strong&gt; how you keep terse code in your projects). It appealed to me in a way that few people can understand - Zuckerberg at his very core was a &lt;strong&gt;hacker&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Hacking does not have a simple definition. My current employer where I do some contract programming/scripting/boring work asked what programming experience I had. I told him that I was a hacker, not a programmer. He responded that there were many levels of programmer - junior, senior, and so forth. I told him that I was aware of the hierarchy installed in most businesses, but that I fell outside of them. I don&apos;t write lines of code. I don&apos;t check things in to repositories with any sense of responsibility. I hack together lines of code to complete a project in the best way I know how. I steal code from others and stand on the shoulders of giants. As Zuckerberg&apos;s actor said in &lt;em&gt;The Social Network, &lt;/em&gt;“I think if your clients want to sit on my shoulders and call themselves tall, they have the right to give it a try—but there’s no requirement that I enjoy sitting here listening to people lie.&quot; I do not call myself tall in this regard; it is ridiculous to even suggest it.&lt;/p&gt;
&lt;p&gt;No, what I am good at is solving the algorithmic. My resume has gone through various iterations, but the current technology-driven one simply lists a few notable companies I&apos;ve worked for and the assurance that if your problem is algorithmic in nature, that I can either solve it myself or find you the person you need to solve it. This is perhaps the one thing I am proud of (having dispensed of pride in most other areas). My brain works tirelessly to solve algorithms; it works like a brute force program that can know the salt used in complex problems without needing to guess. It gives me a huge head start in anything iterative. If this makes sense to you, you might need to consult a mental health professional.&lt;/p&gt;
&lt;p&gt;My creativity is paired irreversibly with my love for the algorithmic. I have the luxury of having a brain that can conceptualize a problem and the various ways to attack said problem using all sorts of methods - ranging from the simple to the complex. It does this automatically, and attempts to visualize it for others fails utterly and completely. What I consider to be &quot;creative&quot; is not what nearly anyone else would call it, but over time I&apos;ve come to understand that how I reverse engineer problems is the source of my creativity.&lt;/p&gt;
&lt;p&gt;This love for the algorithmic does not apply only in math, science, and computers - in fact, those are the areas where I am most weak. Like Kirtan Loor in the Rogue Squadron books (talk about a nerd reference; at least Zac will appreciate it), I rely too heavily on my memory and my previous achievements in those fields. This hampers me and drags me down, often completely turning off my creativity. It is when I approach unknown subjects that this love for the algorithmic truly blossoms. Two examples follow.&lt;/p&gt;
&lt;p&gt;Recently I found myself in the position of needing to figure out how to crack a wireless network (my own, of course - it would be illegal otherwise!). I knew that WEP was insecure, but didn&apos;t know much about the technology. Doing some research, I found it utterly fascinating exactly how insecure it was and how easy it would be to acquire the key. Moving on to WPA-TKIP, I read tutorial after tutorial with poorly written instructions that didn&apos;t really help me - so I moved on to all the boring stuff. Understanding the root problem rather than duplicating someone&apos;s instructions always worked better for me and provided me with a better sense of accomplishment when I finished it, anyway. In many senses, cracking WPA was easier, even if they used TKIP since WPA was still based on the Pre-Shared Key (PSK) concept. What you needed to do was deauthorize a connection, forcing them to re-initiate the handshake with the router, capture the handshake, and then crack this handshake to get the key. The problem, of course, is that you have to brute force the key with rainbow tables, word lists, or outright guess it. Cracking it on a standard powerful desktop could take days, if not weeks. Enter &lt;a href=&quot;http://www.wpacracker.com/faq.html&quot; target=&quot;_blank&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;WPA Cracker&lt;/a&gt; - a cloud-based solution that takes the handshake and runs it against their 400+ CPU cluster, giving you a result (if there is one) within an hour - for $17. Amazing. This is one of the ways how technology excites me - leveraging the use of redundant and cheap resources &lt;em&gt;&lt;span style=&quot;text-decoration: underline;&quot;&gt;en masse&lt;/span&gt;&lt;/em&gt; to provide distributed computing power never before &lt;strong&gt;conceptualized&lt;/strong&gt;, much less implemented!&lt;/p&gt;
&lt;p&gt;I have thought long and hard about the biomechanics of throwing a baseball. This is incredibly boring for nearly everyone I know outside of a handful of crazies. The very nature of this industry promotes closed-minded analysis and protecting the data that universities and other institutions collect. Kinesiologists and others who do studies on pitchers in their $200,000+ sports labs are not interested in sharing their methods or data with a Seattle-based hacker who is trying to build his own private motion capture laboratory on a budget of $1,000. To me, this project represents what I believe hacking to be - freeing information from those who would desperately seek to protect it for their own selfish means. Doctors and people high up in academia look down on me for approaching this problem in ways that no other person would consider valid - a college dropout self-studying from the same texts available at premier universities, hiring interns who are far more experienced, and experimenting on his own body. But wait: All of a sudden, we aren&apos;t just talking about &lt;strong&gt;hacking&lt;/strong&gt;, are we? What I feel I am doing with the motion capture lab and the desire to make as much of it as possible open source represents the true nature of &lt;strong&gt;science&lt;/strong&gt;. For science to be truly available to everyone, it must be repeatable and verifiable. I plan on making my lab on a shoestring budget and duplicating the efforts for others who want to follow in my footsteps. My interests go beyond the entrepreneurial and into the scientific - even if the others do not see me as their equal because of missing letters after my name.&lt;/p&gt;
&lt;p&gt;Hacking is not something that can be defined. It manifests itself differently in each person. To attempt to describe it with a static definition would be like telling someone that a simple definition exists for the concept of creativity, or love. Hacking is a way of thinking - a way of building and deconstructing - in paths that are annoyingly incomplete, terribly cluttered, and horribly documented.&lt;/p&gt;
&lt;p&gt;And ruthlessly efficient.&lt;/p&gt;
</description>
  <comments>https://kylebee.livejournal.com/770750.html?view=comments#comments</comments>
  <category>random thoughts</category>
  <category>hacking</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
  </item>
</channel>
</rss>
