<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
 
 <title>Kinnetica</title>
 <link href="http://www.kinnetica.com/atom.xml" rel="self"/>
 <link href="http://www.kinnetica.com/"/>
 <updated>2014-08-10T10:16:49-04:00</updated>
 <id>http://www.kinnetica.com/</id>
 <author>
   <name>Michael Levin</name>
   <email>michael@kinnetica.com</email>
 </author>

 
 <entry>
   <title>Using Screen on Mac OS X</title>
   <link href="http://www.kinnetica.com/2011/05/29/using-screen-on-mac-os-x/"/>
   <updated>2011-05-29T00:00:00-04:00</updated>
   <id>http://www.kinnetica.com/2011/05/29/using-screen-on-mac-os-x</id>
   <content type="html">&lt;p&gt;For the last week, I have been using GNU Screen to help me manage my terminal windows. Although there is a slight learning curve with Screen, there is one major advantage that more than makes up for the extra effort.&lt;/p&gt;

&lt;p&gt;Suppose you want to SSH to a computer, start some long-running process, and not have to worry about keeping the connection open for that process to finish. Wouldn&#39;t it be great if you could just reconnect later and not only check on the progress, but also have all of your terminal windows in the same state as how you left them?&lt;/p&gt;

&lt;p&gt;Here&#39;s a similar scenario that I ran into recently. Suppose you&#39;re running a script in the background that monitors a folder and compiles CoffeeScript files into JavaScript as the files change. If you simply ran the script from the terminal, the script would need to be restarted every time you closed the terminal window. What if you could start the script once and know it&#39;s still running in the background even if you&#39;ve opened and closed the Terminal application many times since the script was started?&lt;/p&gt;

&lt;p&gt;Screen is able to solve both of these problems simply and elegantly. Now, if I ever accidentally close the Terminal application or get disconnected over SSH, the state of all my windows and processes will remain the same. To me, that&#39;s a major selling feature.&lt;/p&gt;

&lt;p&gt;Is Screen right for you? Here is a simple guide to get you started quickly and help you decide if it fits your workflow.&lt;/p&gt;

&lt;h3&gt;Getting Started&lt;/h3&gt;

&lt;p&gt;To get started, simply type &lt;code&gt;screen&lt;/code&gt;. The first thing you will see is the startup screen, which you can dismiss by pressing either space or return. I explain how to disable this screen later in the article.&lt;/p&gt;

&lt;p&gt;What you see afterwards should look very familiar. It&#39;s the same exact terminal you&#39;re already familiar with. However, you now have many different options that weren&#39;t available before. To see a list, you can view the help by pressing &lt;code&gt;Ctrl-a ?&lt;/code&gt; (control-a followed by a question mark).&lt;/p&gt;

&lt;h3&gt;Creating and Naming Terminal Windows&lt;/h3&gt;

&lt;p&gt;Screen provides a couple useful ways of managing multiple terminal windows.&lt;/p&gt;

&lt;p&gt;While in screen, type the command &lt;code&gt;Ctrl-a &quot;&lt;/code&gt; to see a list of open terminals. Currently, you should only have one terminal open, with the number 0 and a default name of the shell you are using. In my case, this is bash. Press enter to go back to your terminal. To rename this terminal, type &lt;code&gt;Ctrl-a A&lt;/code&gt;. You should see a prompt appear at the bottom asking you to give the window a title. Call it Terminal 1. If you press &lt;code&gt;Ctrl-a &quot;&lt;/code&gt; again, you should see the terminal listed by the title we gave it.&lt;/p&gt;

&lt;p&gt;Now, let&#39;s create two more terminals and give them different names. The first way to create a new terminal is by typing &lt;code&gt;Ctrl-A c&lt;/code&gt;. Rename it one more time by typing &lt;code&gt;Ctrl-a A&lt;/code&gt; and calling it Terminal 2. You should now be able to type &lt;code&gt;Ctrl-a &quot;&lt;/code&gt; again and see both terminals. You can use the up and down arrow keys or j/k to move between them.&lt;/p&gt;

&lt;p&gt;Now let&#39;s create one more terminal and name it at the same time. You can do this by typing &lt;code&gt;screen -t &quot;Terminal 3&quot;&lt;/code&gt;. This will create another terminal named Terminal 3. You can check this by typing &lt;code&gt;Ctrl-a &quot;&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;You can also use the -t flag to provide a number for the terminal window. For instance, &lt;code&gt;screen -t &quot;Terminal 9&quot; 9&lt;/code&gt; will create a new terminal window called Terminal 9 with a terminal number of 9. I will show you why this can be useful in the next section.&lt;/p&gt;

&lt;h3&gt;Navigating Between Terminal Windows&lt;/h3&gt;

&lt;p&gt;There are a number of different methods for navigating between windows. One simple way is using &lt;code&gt;Ctrl-a n&lt;/code&gt; and &lt;code&gt;Ctrl-a p&lt;/code&gt;. This simply switches between the previous and next window. Another method is by selected &lt;code&gt;Ctrl-a [terminal-number]&lt;/code&gt;. For instance, to navigate to Terminal 9 that we created earlier, you can simply type &lt;code&gt;Ctrl-a 9&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;You can also have more than one terminal window open at the same time. To do this, split the terminal window using &lt;code&gt;Ctrl-a S&lt;/code&gt;. Once you have split panes, you can easily switch between them using &lt;code&gt;Ctrl-a [Tab]&lt;/code&gt;. Once you are in the second pane, you need to select the terminal you want to see in that pane. You can do this using any of the methods described above: &lt;code&gt;Ctrl-a &quot;&lt;/code&gt;, &lt;code&gt;Ctrl-a n&lt;/code&gt;, &lt;code&gt;Ctrl-a p&lt;/code&gt;, or &lt;code&gt;Ctrl-a [term-num]&lt;/code&gt;. If at any point you want to exit out of split-pane view, simply navigate to the pane you want and type &lt;code&gt;Ctrl-a Q&lt;/code&gt;. If the other pane doesn&#39;t disappear right away, it should get overwritten as you keep using the terminal window or you can type &lt;code&gt;Ctrl-L&lt;/code&gt; or &lt;code&gt;clear&lt;/code&gt; to reset the screen.&lt;/p&gt;

&lt;p&gt;One cool feature is that you can use these navigation tools even while you have other programs open within your terminal. Try this example: open up a couple terminal windows and open &lt;code&gt;vi&lt;/code&gt; in one of them. You should be able to navigate back and forth between the different terminals without having to close &lt;code&gt;vi&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;Detaching and Reattaching Your Screen Session&lt;/h3&gt;

&lt;p&gt;This is my personal favorite feature of screen. Type Ctrl-a d to detach from your screen session. You are now back to your standard terminal. Type &lt;code&gt;screen -list&lt;/code&gt;. It should list that you have one screen session open. Type &lt;code&gt;screen -r&lt;/code&gt; to reattach to this session. Once you reattach, you should see that all of the state of your terminal windows has been maintained. If you had more than one screen session open, you would have to provide the process id (PID) following &lt;code&gt;screen -r&lt;/code&gt; to select which session you want to reattach.&lt;/p&gt;

&lt;p&gt;It&#39;s important to note that you don&#39;t necessarily need to type Ctrl-a d to detach the screen session to use this feature. If you accidentally close the Terminal application while you have important work open (as I have done many times), you will still be able to reattach and resume your work if you were using screen.&lt;/p&gt;

&lt;h3&gt;More Tips&lt;/h3&gt;

&lt;h4&gt;Removing the Startup Message&lt;/h4&gt;

&lt;p&gt;To remove the startup message, add the following line to your &lt;code&gt;.screenrc&lt;/code&gt; in your home folder:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;startup_message off&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If the &lt;code&gt;.screenrc&lt;/code&gt; file doesn&#39;t already exist, simply create it.&lt;/p&gt;

&lt;h4&gt;Recognizing Different Sessions&lt;/h4&gt;

&lt;p&gt;If you want to run multiple screen sessions at the same time, it&#39;s important to have a better way to differentiate screen sessions than by PID. To do this, start screen by using the -S flag. For instance, &lt;code&gt;screen -S rubyterms&lt;/code&gt; will start the screen session with the session name rubyterm. This name will be displayed when you type &lt;code&gt;screen -list&lt;/code&gt; and can be used as an argument to &lt;code&gt;screen -r&lt;/code&gt; to start it back up.&lt;/p&gt;

&lt;h4&gt;Knowing Where You Are In Screen&lt;/h4&gt;

&lt;p&gt;To view which terminal you are currently using, you can use &lt;code&gt;Ctrl-a i&lt;/code&gt;. If you always want to see the terminal you are on and all open terminals by default, add the following line to your &lt;code&gt;.screenrc&lt;/code&gt; file:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;caption always &quot;%{= Wk}%-w%{= Bw}%n %t%{-}%+w %-=&quot;&lt;/code&gt;&lt;/p&gt;

&lt;h4&gt;Setting Up A Startup Configuration&lt;/h4&gt;

&lt;p&gt;A couple more small edits to your &lt;code&gt;.screenrc&lt;/code&gt; can make sure that a few default terminals are automatically created and named for you on startup. Simply add a few &lt;code&gt;screen -t&lt;/code&gt; lines in your &lt;code&gt;.screenrc&lt;/code&gt; file. Here is an example:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;screen -t &quot;server&quot; 1&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;screen -t &quot;logs&quot; 2&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;screen -t &quot;ruby&quot; 3&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;screen -t &quot;coffeescript&quot; 4&lt;/code&gt;&lt;/p&gt;

&lt;h4&gt;Exiting Screen&lt;/h4&gt;

&lt;p&gt;If you want to exit screen without detaching, you must simply exit all of the open shells by typing exit in each. After the last one is closed, screen will terminate.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Pretty Printing Minified JavaScript for Easy Reading and Debugging</title>
   <link href="http://www.kinnetica.com/2011/05/15/pretty-printing-minified-javascript/"/>
   <updated>2011-05-15T00:00:00-04:00</updated>
   <id>http://www.kinnetica.com/2011/05/15/pretty-printing-minified-javascript</id>
   <content type="html">&lt;p&gt;Having trouble trying to read and debug minified JavaScript in the browser? Don&#39;t worry. Newly added pretty printing in the Chrome Developer Tools is here to make it much easier.&lt;/p&gt;

&lt;p&gt;For instance, here is a minified script being displayed within the Chrome Developer Tools:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/minified_script_without_formatting.jpg&quot; alt=&quot;Minified JavaScript in Chrome Developer Tools&quot; /&gt;&lt;/p&gt;

&lt;p&gt;By clicking on the curly brace (&quot;Pretty Print&quot;) icon in the bottom left corner, the JavaScript is transformed into something that is both easy for humans to read and easy for setting breakpoints.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/minified_script_with_formatting.jpg&quot; alt=&quot;Minified JavaScript in Chrome Developer Tools With Formatting&quot; /&gt;&lt;/p&gt;

&lt;p&gt;This feature is now available in both the Chrome Dev and Canary builds for Mac and Windows.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Google Analytics Can Now Track Site Speed</title>
   <link href="http://www.kinnetica.com/2011/05/07/google-analytics-begins-tracking-site-speed/"/>
   <updated>2011-05-07T00:00:00-04:00</updated>
   <id>http://www.kinnetica.com/2011/05/07/google-analytics-begins-tracking-site-speed</id>
   <content type="html">&lt;p&gt;Tracking and improving performance across your website just got a lot easier.&lt;/p&gt;

&lt;p&gt;Google Analytics has added the ability to track page load times across all of the pages on your website. The option is not currently on by default, but it can be turned on by adding this method call to your Analytics tracking script:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;_trackPageLoadTime();&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;More detailed information about setting it up and how it works can be found on this Google Analytics &lt;a href=&quot;http://www.google.com/support/analyticshelp/bin/answer.py?hl=en&amp;amp;answer=1205784&quot;&gt;help page&lt;/a&gt;. Once your tracking code is configured, you will begin seeing statistics on the new Google Analytics site under the Content category.&lt;/p&gt;

&lt;p&gt;No user likes to wait around for websites to load. With Google Analytics now providing developers with free and easy access to performance metrics, we can now take a more scientific approach in optimizing page load speeds to improve the user&#39;s experience on all of our websites.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>First Time vs Serial Entrepreneurs</title>
   <link href="http://www.kinnetica.com/2011/05/01/first-time-vs-serial-entrepreneurs/"/>
   <updated>2011-05-01T00:00:00-04:00</updated>
   <id>http://www.kinnetica.com/2011/05/01/first-time-vs-serial-entrepreneurs</id>
   <content type="html">&lt;p&gt;In his post, Fred Wilson discusses his experiences with investing in companies with new vs. serial entrepreneurs.&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;The best first time entrepreneurs have been stewing on their idea for quite a while. It is a personal passion of theirs and they bring to it a fresh take, a  stubborn insistence on their approach, and they obsess about the idea 24/7. They often get the right product into the market at the right time and they capture the user&#39;s attention and usage with that product/market fit.&lt;/p&gt;

&lt;p&gt;Where first time entrepreneurs often struggle is when the product works so well that they have to quickly build a company to support the product. Most of  the time, the first time founder has not spent anytime thinking about what kind of company they want to build, what kind of people they want to surround  themselves with, what kind of culture they want to create, etc. The first time founder often has no experience recruiting, managing teams, and building organizations.&lt;/p&gt;

&lt;p&gt;Serial entrepreneurs, on the other hand, often struggle with the founding idea and getting to product/market fit. They start the second and third and fourth  company because they love startups and they don&#39;t know any other way to work and be productive. But they often lack that passion around a singular idea that drives first time founders.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;There are two main components of every successful startup: a good idea and strong execution. When VCs invest in serial entrepreneurs, it&#39;s usually early on and the entrepreneur has usually already proven their ability to execute effectively on a good idea.&lt;/p&gt;

&lt;p&gt;However, companies started by first time entrepreneurs have yet to prove that they either have a good idea or can execute it effectively. A lot of these companies will fail before ever getting to the stage when they could catch a VC&#39;s attention. However, if they make it past this point, they have already proven their idea works in the market and needs the VC for large amounts of capital to scale their idea effectively.&lt;/p&gt;

&lt;p&gt;With these two points in mind, it makes sense that serial entrepreneurs need more help with the idea and product/market fit, while the first time entrepreneur needs more help with scaling the business (recruiting, managing teams, etc.).&lt;/p&gt;

&lt;p style=&quot;text-align:right;font-style:italic;&quot;&gt;&lt;a href=&quot;http://www.avc.com/a_vc/2011/05/first-time-vs-serial-entrepreneurs.html&quot;&gt;[via Fred Wilson]&lt;/a&gt;&lt;/p&gt;

</content>
 </entry>
 
 <entry>
   <title>Better JavaScript Debugging Techniques</title>
   <link href="http://www.kinnetica.com/2011/04/20/better-javascript-debugging-techniques/"/>
   <updated>2011-04-20T00:00:00-04:00</updated>
   <id>http://www.kinnetica.com/2011/04/20/better-javascript-debugging-techniques</id>
   <content type="html">&lt;p&gt;JavaScript code is notoriously difficult to debug. It tends to fail very silently, and even when modern browsers are able to provide errors and line numbers, these sometimes tend to be unhelpful. As web applications are now relying on JavaScript for critical parts of its appearance and functionality, developing a powerful toolkit for debugging and testing JavaScript code is crucial.&lt;/p&gt;

&lt;p&gt;Here are some tools I recommend:&lt;/p&gt;

&lt;h3&gt;Chrome Developer Tools&lt;/h3&gt;

&lt;p&gt;If you&#39;re using Chrome, there are many different tools at your disposal for discovering and debugging JavaScript issues. If something seems to be working incorrectly, simply open up the Chrome Developer Tools console (Cmd-Alt-J on a mac or View -&gt; Developer -&gt; JavaScript Console from the menu). You should see any errors, with associated line numbers, for the page you are currently browsing. You can see similar errors in Firefox by using the Firebug extension.&lt;/p&gt;

&lt;p&gt;One new feature in Chrome is the ability to see a stack trace for each error. Just click on the arrow to the left of the error to expand it. This feature becomes more and more convenient as the complexity of your JavaScript program increases, and there are many different paths of possible execution.&lt;/p&gt;

&lt;p&gt;Chrome Developer Tools also gives you the power to set breakpoints in your code under the Scripts tab. Simply select the JavaScript file you&#39;re trying to debug and click on the line number where you want to set the breakpoint. After reloading the page, Chrome will pause the execution of your script, let you step through it, as well as examine the state of your variables and DOM.&lt;/p&gt;

&lt;p&gt;If breakpoints are not your debugging tool of choice, both Chrome and Firefox (with Firebug) support adding debugging statements to your code that get output to the console. To do this, simply use &lt;code&gt;console.debug()&lt;/code&gt; and pass the variable you want to examine as a parameter.&lt;/p&gt;

&lt;p&gt;Chrome has gone a step further and provided a few new console methods for you to use. One of these is &lt;code&gt;console.assert()&lt;/code&gt;. This method is passed some condition as a parameter, which when evaluated to false, will print a complete stack trace. This can be very useful for validating any invariants in your code. Also, if you want to see a stack trace at any point in the program, you can now throw in a call to &lt;code&gt;console.trace()&lt;/code&gt;. These new additions to Chrome, as well as some others, were explained in greater detail earlier today in a &lt;a href=&quot;http://blog.chromium.org/2011/04/chrome-developer-tools-understanding.html&quot;&gt;post on the Chromium blog&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The extensive features in Google Chrome&#39;s Developer Tools makes Chrome a very compelling choice for assisting in debugging all of your JavaScript code.&lt;/p&gt;

&lt;h3&gt;Jasmine&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/pivotal/jasmine/wiki&quot;&gt;Jasmine&lt;/a&gt; is a testing framework for your JavaScript code. While JavaScript has never been a language that has traditionally received a lot (or any) test coverage from most developers, this is slowly changing. JavaScript is a much more serious language today than it was in the past, with the introduction of powerful frameworks, faster browser support, and AJAX. As the code we write becomes more essential to the application, we have a responsibility to make sure it&#39;s working correctly.&lt;/p&gt;

&lt;p&gt;If you&#39;re a Rails or Ruby developer who has played with RSpec, you will feel right at home with the syntax. The &lt;a href=&quot;http://railscasts.com/episodes/261-testing-javascript-with-jasmine&quot;&gt;Testing JavaScript with Jasmine&lt;/a&gt; railscast should get you up and running very quickly.&lt;/p&gt;

&lt;p&gt;If you just want to try it out on a simple static site, look at the &lt;a href=&quot;https://github.com/pivotal/jasmine/tree/master/example&quot;&gt;example&lt;/a&gt; provided in the Jasmine GitHub repository. Once you have all the files downloaded, you can just edit the &lt;code&gt;SpecRunner.html&lt;/code&gt; file. First, include all of your JavaScript source files, followed by your test files. You should be able to see the results of your tests by simply opening &lt;code&gt;SpecRunner.html&lt;/code&gt; in your browser.&lt;/p&gt;

&lt;h3&gt;JSLint&lt;/h3&gt;

&lt;p&gt;While &lt;a href=&quot;http://www.jslint.com/&quot;&gt;JSLint&lt;/a&gt; is not necessarily meant for debugging, it is a very useful tool to make sure your code is clean and following best practices. Run your JavaScript through it once you&#39;re finished coding to see what it recommends. Certain design choices made in the JavaScript language tend to cause difficult-to-find bugs. JSLint tries to make recommendations that steer you away from making those type of mistakes. If you have trouble understanding any of its recommendations or don&#39;t understand the reasoning behind any of them, reading this &lt;a href=&quot;http://www.jslint.com/lint.html&quot;&gt;page&lt;/a&gt; should help.&lt;/p&gt;

&lt;p&gt;I hope these tips are useful to you. Please let me know if you have any JavaScript debugging tips or tricks of your own.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Automatically Generating Sitemap.xml Files For Jekyll</title>
   <link href="http://www.kinnetica.com/2011/04/18/sitemap-files-for-jekyll/"/>
   <updated>2011-04-18T00:00:00-04:00</updated>
   <id>http://www.kinnetica.com/2011/04/18/sitemap-files-for-jekyll</id>
   <content type="html">&lt;h3&gt;Why Provide A Sitemap.xml File&lt;/h3&gt;

&lt;p&gt;Sometimes, crawlers just need a little help. Who can blame them? With hundreds of millions of websites on the internet for search engines to index, no wonder they might benefit from a boost. One way to help crawlers is by providing a sitemap.xml file. Not only does this file list all of the pages on a site that you want to make sure are indexed, but it can also provide useful metadata about each of these pages such as the last modified date, change frequency, and priority. While search engines are very good at finding your pages already, the metadata can be particularly useful, as search engines aren&#39;t as good at determining the relative importance of pages and how often to check for changes.&lt;/p&gt;

&lt;p&gt;You can find a detailed explanation of the structure of sitemap.xml files and its metadata at the &lt;a href=&quot;http://www.sitemaps.org/&quot;&gt;sitemaps.org&lt;/a&gt; site.&lt;/p&gt;

&lt;p&gt;Once you create the XML file, you can use it for many different search engines. The simplest way to notify search engines about your sitemap.xml file is to include a reference in your robots.txt file. For my site, the entry looks like this: &lt;code&gt;Sitemap: http://www.kinnetica.com/sitemap.xml&lt;/code&gt;. Google, Yahoo, Bing, and possibly other search engines will then be able to find the sitemap file and use it to help with indexing and crawling all of your pages and posts.&lt;/p&gt;

&lt;p&gt;In addition, by signing up for their respective webmaster tools sites (&lt;a href=&quot;http://www.google.com/webmasters/tools&quot;&gt;Google Webmaster Tools&lt;/a&gt;, &lt;a href=&quot;https://siteexplorer.search.yahoo.com&quot;&gt;Yahoo Site Explorer&lt;/a&gt;, &lt;a href=&quot;http://www.bing.com/webmaster&quot;&gt;Bing Webmaster Tools&lt;/a&gt;), you can see which of the sites in your sitemap.xml have been indexed by each search engine. With Google Webmaster Tools, you can also let them know when your sitemap.xml has been updated and have them refresh their data.&lt;/p&gt;

&lt;h3&gt;Criteria For A Solution&lt;/h3&gt;

&lt;p&gt;When I started this site, I wanted to automate generating the sitemap.xml file. After reading the documentation on how to create &lt;a href=&quot;https://github.com/mojombo/jekyll/wiki/Plugins&quot;&gt;Jekyll plugins&lt;/a&gt;, I decided to try to write a simple plugin that could generate this file for me.&lt;/p&gt;

&lt;p&gt;These were my requirements:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;It should automatically be able to find all of the posts and pages on my site and provide the URLs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It should be able to automatically figure out the date the page or post was last modified. This is a little tricky, since a change to a layout file could change the output of many files (or possibly all of the posts at once). I decided to take the purist approach and calculated the last modified date by the latest date of either the page or post, or any of the layouts that it uses. However, I might change my mind later and simply use the last modified date of the post.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It should provide a way to exclude certain pages and posts if I don&#39;t want them in my sitemap.xml file. I am currently only excluding my atom.xml file.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It should allow me to manually specify the change frequency and priority for any page or post. By simply providing that information in the YAML Front Matter, the plugin should be able to pick up this information and include it in the generated file.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;


&lt;h3&gt;Give It A Try&lt;/h3&gt;

&lt;p&gt;I&#39;ve completed my first version and wanted to get it out there for people to try. It&#39;s currently &lt;a href=&quot;https://github.com/kinnetica/jekyll-plugins&quot;&gt;available for download&lt;/a&gt; on GitHub. I have provided instructions on how to use it in the README file.&lt;/p&gt;

&lt;p&gt;If this seems like it might be useful for you, please give it a try and let me know what you think via &lt;a href=&quot;mailto:michael@kinnetica.com&quot;&gt;email&lt;/a&gt; or twitter &lt;a href=&quot;http://www.twitter.com/kinnetica&quot;&gt;@kinnetica&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;After all, it&#39;s not just the crawlers that can use a little help sometimes.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Jekyll - 7 Tips &amp; Tricks</title>
   <link href="http://www.kinnetica.com/2011/04/17/jekyll-tips-and-tricks/"/>
   <updated>2011-04-17T00:00:00-04:00</updated>
   <id>http://www.kinnetica.com/2011/04/17/jekyll-tips-and-tricks</id>
   <content type="html">&lt;p&gt;Instead of going with Wordpress or Tumblr for this blog, I decided to try out &lt;a href=&quot;https://github.com/mojombo/jekyll&quot;&gt;Jekyll&lt;/a&gt;. I was very happy with the experience, and thought I would share some of the lessons I learned to hopefully make the process easier for others.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Jekyll has very helpful documentation available on their GitHub &lt;a href=&quot;https://github.com/mojombo/jekyll/wiki&quot;&gt;wiki&lt;/a&gt;. However, I found it hard to find all the available content simply by browsing the links on the wiki Home page. Once you have the basics up and running, I suggest clicking on &lt;a href=&quot;https://github.com/mojombo/jekyll/wiki/_pages&quot;&gt;Pages&lt;/a&gt; to see all of the available material. The &lt;a href=&quot;http://groups.google.com/group/jekyll-rb&quot;&gt;mailing list&lt;/a&gt; is also a good place to go for help.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The documentation also has a &lt;a href=&quot;https://github.com/mojombo/jekyll/wiki/Sites&quot;&gt;listing of sites&lt;/a&gt; that were created using Jekyll. Almost all of them have code posted on GitHub. This is definitely worth sifting through to get a better idea of how Jekyll works and how it can be used to accomplish your vision.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;While you&#39;re initially developing your site, it&#39;s very convenient to be able to see changes automatically as you make them without having to constantly restart the Jekyll WEBrick server. Make sure to either put &lt;code&gt;auto: true&lt;/code&gt; in your &lt;code&gt;_config.yml&lt;/code&gt; or start the server using the &lt;code&gt;--auto&lt;/code&gt; flag to see your changes in real time. This is not the default behavior. Other customizations to your &lt;code&gt;_config.yml&lt;/code&gt; can be found &lt;a href=&quot;https://github.com/mojombo/jekyll/wiki/Configuration&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;While working on writing posts, there are two different methods for keeping
posts from appearing when your site is generated. The easiest way is
including &lt;code&gt;published: false&lt;/code&gt; in the &lt;a href=&quot;https://github.com/mojombo/jekyll/wiki/YAML-Front-Matter&quot;&gt;YAML front
matter&lt;/a&gt; of that
post.&lt;/p&gt;

&lt;p&gt;Personally, I found it helpful to create a separate &lt;code&gt;_drafts&lt;/code&gt; directory. This
directory holds all of my unfinished posts. When the post is ready, I simply
rename the file to reflect the correct date and copy it over to the &lt;code&gt;_posts&lt;/code&gt;
directory.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If you&#39;re going to install and enable pygments, make sure you remember that
you will need to provide styles for syntax coloring. For my site, I
experimented with some of the stylesheets found
&lt;a href=&quot;https://github.com/richleland/pygments-css&quot;&gt;here&lt;/a&gt;. You will need to change
the default class in the styles from &lt;code&gt;.codehilite&lt;/code&gt; to &lt;code&gt;.highlight&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;One other cool feature with using pygments is the ability to add line
numbers to your code. For instance, if you were writing Ruby code and wanted
to include line numbers, simply surround the code with &lt;code&gt;{ % highlight ruby
linenos % }&lt;/code&gt; and &lt;code&gt;{ % endhighlight % }&lt;/code&gt; (omit the spaces between curly brace
and percent sign). If you don&#39;t want line numbers, simply don&#39;t include the
&lt;code&gt;linenos&lt;/code&gt; keyword.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If you are not yet familiar with Liquid, it&#39;s worth spending a little time getting up to speed. I&#39;ve found the best resources to be the &lt;a href=&quot;https://github.com/tobi/liquid/wiki/liquid-for-designers&quot;&gt;Liquid for Designers&lt;/a&gt; guide on GitHub and the &lt;a href=&quot;http://liquid.rubyforge.org/&quot;&gt;documentation&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;One of the convenient features of Jekyll is the ability to add metadata to
all of your pages in the front matter section. By using the YAML &lt;code&gt;key:
value&lt;/code&gt; syntax, you can define your own custom variables and reference them
within your site.&lt;/p&gt;

&lt;p&gt;One use for this is being able to change the page title depending on
the page being displayed. For instance, if you have &lt;code&gt;Ham: Is It Superior
To Bacon?&lt;/code&gt; as the title in the front matter of a post, having &lt;code&gt;&amp;lt;title&amp;gt;{ {
 page.title } }&amp;lt;/title&amp;gt;&lt;/code&gt; (omit the spaces between the curly brackets) in your
layout file will set the page title to &lt;code&gt;Ham: Is It Superior To Bacon?&lt;/code&gt; within
that post.&lt;/p&gt;

&lt;p&gt;Another clever use of this trick is to add a description and keyword custom
variable on each post and page. You can then include these custom variables
within a description and keywords meta tag in your template. The
description will usually get picked up by Google and displayed in its search
results. While &lt;a href=&quot;http://googlewebmastercentral.blogspot.com/2009/09/google-does-not-use-keywords-meta-tag.html&quot;&gt;Google ignores meta  keywords&lt;/a&gt;, other search engines might still use them, so it might
make sense to include them as well. Doing this will make it easier for search
engines to display a relevant description and categorize all of your
indexed pages.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;The source code for my personal site is available on GitHub &lt;a href=&quot;https://github.com/kinnetica/kinnetica.com&quot;&gt;here&lt;/a&gt;. Feel free to use it to learn or as a starting point, but please make sure to remove all site specific code (e.g. Google Analytics snippet).&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Kindle To Lead Ad-Subsidized Hardware Revolution</title>
   <link href="http://www.kinnetica.com/2011/04/15/ad-subsidized-kindle/"/>
   <updated>2011-04-15T00:00:00-04:00</updated>
   <id>http://www.kinnetica.com/2011/04/15/ad-subsidized-kindle</id>
   <content type="html">&lt;p&gt;You go online, you see ads. You turn on the television, you watch ads. You&#39;re driving on the highway, you pass ads. How often do you really get to make or save any money just for seeing ads?&lt;/p&gt;

&lt;p&gt;Amazon recently announced an &lt;a href=&quot;http://www.amazon.com/gp/product/B004HFS6Z0/&quot;&gt;ad-subsidized version of its Kindle&lt;/a&gt;, which retails for $114 instead of $139. This results in a total savings of $25, or about an 18% discount. It is currently available for pre-order.&lt;/p&gt;

&lt;p&gt;Knowing how Amazon operates, the ads will likely be well-designed and uniquely suited for the e-ink display. They will be much less distracting than the flashy, noisy online banner ads that we&#39;ve all come to expect from web advertising. It&#39;s hard to imagine most consumers would pass up the savings, especially when the ads would cost them so little in annoyance.&lt;/p&gt;

&lt;p&gt;From Amazon&#39;s perspective, this is a potential gold mine. Suppose Amazon sells a couple hundred thousand of the ad-subsidized Kindles within the first couple weeks or months. By losing $25 for each Kindle, they are earning the right to make ad revenue over the lifetime of each device. That&#39;s advertising over at least a year or two per customer for a measly $25.&lt;/p&gt;

&lt;p&gt;Furthermore, this advertisement could easily be catered to individual users. Since Amazon already knows which books you are buying, it can charge advertisers a premium and serve up relevant ads to its users.&lt;/p&gt;

&lt;p&gt;If you believe most reports that Amazon is making the majority of its revenue from the Kindle through e-book sales and that the profit margin on the actual device has become razor-thin, this makes perfect sense. If they can significantly reduce the price of the hardware for consumers, they can attract more customers and sell many more e-books.&lt;/p&gt;

&lt;p&gt;I believe the 25 dollars is a conservative test for Amazon for this new business model. If it succeeds, the next stop would be $99, and possibly even lower. I would also not be surprised if the &lt;a href=&quot;http://news.cnet.com/8301-17938_105-20040764-1.html&quot;&gt;rumors&lt;/a&gt; regarding Amazon offering free Kindles to paying Amazon Prime members finally came true. Only it would be with the ad-subsidized model.&lt;/p&gt;

&lt;p&gt;While ad-subsidized hardware hasn&#39;t yet established itself as a proven business model, other companies have considered similar ideas. There was an &lt;a href=&quot;http://techcrunch.com/2010/09/10/google-nexus-one/&quot;&gt;excellent article&lt;/a&gt; a while back on TechCrunch by MG Siegler about Google looking at giving away their Nexus One for free by subsidizing the device with ads. At the time, this plan was killed by the carriers.&lt;/p&gt;

&lt;p&gt;If this model works successfully for Amazon, I suspect Google and other hardware companies will push harder to integrate this model into their products where it makes sense. Ad-subsidized phones and tablets would be the next logical step, leading to cheaper prices and even faster adoption.&lt;/p&gt;

&lt;p&gt;For once, the possibility of having more ads in our lives actually seems exciting.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CSS Selection Attribute</title>
   <link href="http://www.kinnetica.com/css/2011/04/10/css-selection-attribute/"/>
   <updated>2011-04-10T00:00:00-04:00</updated>
   <id>http://www.kinnetica.com/css/2011/04/10/css-selection-attribute</id>
   <content type="html">&lt;p&gt;One of the lesser-known features of CSS is the option to style text selected by the user. This is achieved using the &lt;code&gt;::selection&lt;/code&gt; pseudo-element. Here is an example:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;css&quot;&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;nd&quot;&gt;:selection&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;#000&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;background&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;#fff&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;nd&quot;&gt;:-moz-selection&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;#000&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;background&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;#fff&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Firefox currently requires the &lt;code&gt;-moz&lt;/code&gt; preface when using the element. This element will work on all modern browsers (Chrome, Firefox, Safari, Opera, IE9). There is no support for earlier versions of Internet Explorer.&lt;/p&gt;

&lt;p&gt;Although a feature like this should be used sparingly, sometimes it can be used to produce good-looking results. An example of where this feature is used well is Paul Irish&#39;s &lt;a href=&quot;http://css3please.com&quot; title=&quot;CSS3 Please&quot;&gt;CSS3 Please&lt;/a&gt; site.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;::selection&lt;/code&gt; pseudo-element was originally written in the CSS3 draft spec, but was later removed. However, it has already been implemented in all major browsers and should continue to be supported in the future.&lt;/p&gt;

&lt;p&gt;Note: Only the &lt;code&gt;color&lt;/code&gt;, &lt;code&gt;background&lt;/code&gt;, and &lt;code&gt;background-color&lt;/code&gt; CSS properties will work with &lt;code&gt;::selection&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;More Resources:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.mozilla.org/En/CSS/%3A%3Aselection&quot;&gt;MDN Documentation About ::selection&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

</content>
 </entry>
 
 <entry>
   <title>Come In, We're Open</title>
   <link href="http://www.kinnetica.com/2011/04/10/come-in-we-are-open/"/>
   <updated>2011-04-10T00:00:00-04:00</updated>
   <id>http://www.kinnetica.com/2011/04/10/come-in-we-are-open</id>
   <content type="html">&lt;p&gt;Hello, there! My name is Michael Levin and I am a web developer living in the Washington, D.C. area. You can find out a little more about me by looking at my &lt;a href=&quot;/about&quot;&gt;about&lt;/a&gt; and &lt;a href=&quot;/resume&quot;&gt;resume&lt;/a&gt; pages.&lt;/p&gt;

&lt;p&gt;The main purpose of this blog will be to share my learning experiences related to web and software development and any resources that I find helpful along the way. I have committed myself to posting at least one new article a week.&lt;/p&gt;

&lt;p&gt;I hope you&#39;ll stick around and learn along with me.&lt;/p&gt;

&lt;p&gt;-Michael&lt;/p&gt;
</content>
 </entry>
 
 
</feed>